Web.configファイルの<membership>要素を介してカスタムメンバーシッププロバイダーを構成している場合、依存性注入で発生する問題を確認できます。
プロバイダーはフレームワークによって構築および管理され、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()
フレームワークがプロバイダーのインスタンスを構築した後にフレームワークによって呼び出されるため、このような追加のセットアップ作業を行うのに最適な場所です。
テストシナリオでは、テストで直接構築するため、プロバイダーインスタンス自体にデータストアプロパティを設定するだけです。