Asp.Net MVC 1.0項目模板包括的AccountController類,它支持構造器注入:注入的MembershipProvider成ASP.Net MVC的AccountController
public AccountController(IFormsAuthentication formsAuth,
IMembershipService service)
{
FormsAuth = formsAuth ?? new FormsAuthenticationService();
MembershipService = service ?? new AccountMembershipService();
}
也包括一個AccountMembershipService類,並將其過支持構造器注入:
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider ?? Membership.Provider;
}
我敢肯定,你們中許多人已經使用了這些單元測試,但我的目標是注入使用Windsor的SqlMembershipProvider,因此在運行時使用Windsor xml文件而不是web.config進行配置。換句話說,我想實際使用AccountMembershipService類的構造函數注入,並且我想繼續使用內置的ASP.Net 2.0成員資格系統。我只希望會員系統的配置通過Windsor IoC。
這可能沒有寫我自己的MembershipProvider,或者SqlMembershipProvider與IoC玩不好?
From MSDN:「該SqlMembershipProvider的構造是由ASP.NET稱爲在應用程序的配置中指定要創建的SqlMembershipProvider類的實例,此構造是不打算從你的代碼使用。」
我相信Phil asked a very similar question,但我沒有足夠的經驗,他得到了the answers。
感謝您的幫助。
更新: 要說清楚,我通過DI提供應用程序MembershipProvider的原因是爲了支持多個租戶。每個租戶都有一個與 ASP membership tables隔離的數據庫。 DI允許我在運行時切換連接字符串,從而使核心應用程序不必知道每個租戶使用哪個數據庫。溫莎控制DI和它「知道」該租戶通過URL發出請求:
var url = HttpContext.Current.Request.ServerVariables["HTTP_HOST"]
邁克哈德洛talks about this technique here.我只是想SqlMembershipProvider的融入他使用這種IoC的設計。
再次感謝。
一個細節,可能打擊這種開放:什麼是會員。AccountMembershipService的構造函數中的提供程序? – 2009-05-28 20:21:07
.Provider是「使用System.Web.Security.MembershipProvider抽象基類公開的應用程序的默認成員資格提供程序」。 – 2009-05-28 20:26:45