将MembershipProvider注入ASP.NET MVC AccountController中

 2023-02-16    297  

问题描述

asp.net mvc 1.0项目模板包括一个AccountController类,支持构造函数注射:

public AccountController(IFormsAuthentication formsAuth, 
    IMembershipService service)
{
    FormsAuth = formsAuth ?? new FormsAuthenticationService();
    MembershipService = service ?? new AccountMembershipService();
}

AN AccountMembershipService类也包括在内,它也支持构造函数注射:

将MembershipProvider注入ASP.NET MVC AccountController中

public AccountMembershipService(MembershipProvider provider)
{
    _provider = provider ?? Membership.Provider;
}

我相信你们很多人都使用这些用于单元测试,但我的目标是使用Windsor注入SqlMembershipProvider,从而在运行时使用Windsor XML文件而不是Web.config在运行时进行配置.换句话说,我想使用构造函数注射为AccountMembershipService class ,我想继续使用内置的ASP.NET 2.0成员资格系统.我只想通过Windsor IOC的成员系统的配置.

如果没有编写自己的empersepprovider,或者没有与IOC发挥得很好?

来自msdn :”SQLMEMBERSHIPPROVIDER构造函数由ASP.NET调用,以创建应用程序配置中的配置中指定的SQLMEMBERSHIPPROVIDER类的实例.此构造函数是不打算从您的代码.”

我相信菲尔问一个非常相似的问题,这里是答案他收到了.

谢谢你的帮助.


更新:
只是为了清楚,我通过DI提供申请会员资格的原因是支持多个租户.每个租户都有一个孤立的数据库,其中包含 ASP会员表. DI允许我在运行时切换连接字符串,从而保持核心应用程序不可知的核心应用程序对每个租户使用的数据库.温莎正在控制DI,它”知道”租户通过URL提出请求:

var url = HttpContext.Current.Request.ServerVariables["HTTP_HOST"]

mike hadlow/a>.我只是想将SqlMembershipProvider集成到他使用这个IOC设计中.

推荐答案

假设您的会员提供程序配置如下所示:

<membership>
    <providers>
        <clear/>
        <add name="www.tenant1.com" 
         type="System.Web.Security.SqlMembershipProvider, ..." 
         .../>
        <add name="www.tenant2.com" 
         type="System.Web.Security.SqlMembershipProvider, ..." 
         .../>
    </providers>
</membership>

您可以使用Windsor选择如下所示的相应提供程序:

var container = new WindsorContainer();
container.AddFacility<FactorySupportFacility>();
container.Register(Component.For<MembershipProvider>()
    .LifeStyle.Transient
    .UsingFactoryMethod(() => Membership.Providers[HttpContext.Current.Request.Url.Host]));
... (your controller registrations, etc)

以上所述是小编给大家介绍的将MembershipProvider注入ASP.NET MVC AccountController中,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/33873.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。