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