Если вы настраиваете пользовательских провайдеров членства через элемент в файле Web.config, то я могу видеть проблемы, которые у вас возникнут с внедрением зависимостей.
Поставщики создаются и управляются платформой, и у вас нет возможности перехватить эту конструкцию, чтобы обеспечить дополнительное внедрение зависимостей для интерфейса IDataStore
.
Если мои предположения верны, то вы можете переопределить метод Initialize()
в своем пользовательском провайдере и выполнить внедрение зависимостей там. В конфигурации провайдера может быть пользовательская настройка имени / значения, которая указывает на тип, реализующий IDataStore
, который передается как часть словаря методу Initialize()
.
Затем вы активируете экземпляр типа хранилища данных и задаете для него соответствующее свойство:
public class MyMembershipProvider : MembershipProvider
{
public IDataStore DataStore
{
get;
set;
}
public override Initialize(string name, NameValueCollection config)
{
var dataStoreType = config["dataStoreProvider"];
if (!String.IsNullOrEmpty(dataStoreType))
{
var type = Type.GetType(dataStoreType);
DataStore = (IDataStore) Activator.CreateInstance(type);
}
}
}
Initialize()
будет вызываться платформой после создания экземпляра вашего провайдера, так что это идеальное место для выполнения любой дополнительной работы по настройке, такой как эта.
Для тестовых сценариев вы просто устанавливаете свойство хранилища данных на самом экземпляре провайдера, так как вы будете создавать его непосредственно в своих тестах.