如果您通過在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
我認爲框架可以爲您節省很多時間。它將用於注入特定的實現到你自定義的Membership Provider中,這個任務是最複雜的,因爲你無法控制提供者的初始化。 – Restuta