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()
は、フレームワークによって呼び出されますこのような追加セットアップ作業を行うのに最適な場所です。
テストシナリオでは、テストで直接構築するため、プロバイダインスタンス自体にデータストアプロパティを設定するだけです。
出典
2009-10-12 00:02:43
Sam
依存性注入フレームワークに精通していますか? – Restuta
@ Restuta - いいえ、私はフレームワークを探していません。この特定の要件には、単純なインタフェースで十分です。開発者は、インターフェイスを継承するだけで、独自のバックエンドストアを作成できるはずです。 – BinaryMisfit
私はフレームワークがあなたに多くの時間を節約できると思います。これは、カスタムメンバーシッププロバイダに固有の実現を注入するために使用されます。このタスクは、プロバイダの初期化を制御できないため、最も複雑です。 – Restuta