ASP.NET MVC 1.0 项目模板包含一个AccountController
类,它支持构造函数注入:
public AccountController(IFormsAuthentication formsAuth,
IMembershipService service)
{
FormsAuth = formsAuth ?? new FormsAuthenticationService();
MembershipService = service ?? new AccountMembershipService();
}
还包括一个AccountMembershipService
类,它也支持构造函数注入:
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider ?? Membership.Provider;
}
我相信你们中的许多人已经将它们用于单元测试,但我的目标是SqlMembershipProvider
使用 Windsor 注入一个,从而在运行时使用 Windsor XML 文件而不是 web.config 对其进行配置。换句话说,我想对AccountMembershipService
类使用构造函数注入,并且我想继续使用内置的 ASP.NET 2.0 Membership 系统。我只是想让会员系统的配置通过 Windsor IoC。
如果不编写我自己的 MembershipProvider,这是否可行,或者SqlMembershipProvider
不能很好地与 IoC 配合使用?
来自 MSDN:“ASP.NET 调用 SqlMembershipProvider 构造函数来创建应用程序配置中指定的 SqlMembershipProvider 类的实例。此构造函数不打算在您的代码中使用。”
我相信菲尔问了一个非常相似的问题,这是他收到的答案。
谢谢你的帮助。
更新: 为了清楚起见,我通过 DI 提供应用程序的 MembershipProvider 的原因是为了支持多个租户。每个租户都有一个带有ASP 成员表的独立数据库。DI 允许我在运行时切换连接字符串,从而使核心应用程序不知道每个租户正在使用哪个数据库。Windsor 正在控制 DI,它“知道”哪个租户通过 url 发出请求:
var url = HttpContext.Current.Request.ServerVariables["HTTP_HOST"]
Mike Hadlow撰写了有关这种技术的文章。我只是想融入SqlMembershipProvider
他对这个 IoC 设计的使用。