asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – 如何将IoC成员资格提供程序与ASP.NET MVC集成大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个在我的MVC控制器中使用的自定义成员资格/角色提供程序,我也希望能够访问ASP.NET MVC,@R_332_9447@使用AuthorizationFilters等。由于有很多人实现了自定义提供程序,我想象很多人都做了这个,但是我没有想出来,也没有发现专门解决这个问题的帖子。 This post是我问题的另一面。在我的情况下,我的自定义提供程序与我的控制器工作良好,我想让MVC也使用它。

我的提供商实现了IoC /依赖注入设计。提供程序公开了超出基准成员资格/角色API的附加功能。在我的控制器中,我使用Castle Windsor创建实例。代码看起来类似于:

public class HomeController : Controller {
    IMembershipservice _membershipservice;
    public HomeController(IMembershipservice membershipservicE) {
        _membershipservice= membershipservice;
    }
}

<castle>
 <components>
  <component id="Membershipservice" 
             service="IMembershipservice,MyApp" 
             type="Membershipservice,MyApp" lifestyle="PerWebrequest">
    <parameters>
      <connectionString>#{defaultConnectionString}</connectionString>
    </parameters>
  </component>
 </components>
</castle>

public class WindsorControllerFactory : DefaultControllerFactory {
    private WindsorContainer _container;
    public WindsorControllerFactory() {
        _container = new WindsorContainer(new XmlInterpreter(new Configresource("castle")));

        List<Type> controllerTypes = new List<Type>();
        foreach (Type t in Assembly.GetExecuTingAssembly().GetTypes()) {
            if (typeof(IController).IsAssignableFrom(t))
                controllerTypes.Add(t);
        }

        foreach (Type t in controllerTypes) {
            // LifestyleType.Transient = new controller instance for each request
            _container.AddComponentLifeStyle(t.FullName,t,LifestyleType.Transient);
        }
    }

    protected override IController GetControllerInstance(Type controllerTypE) {
        return (IController)_container.Resolve(controllerTypE);
    }

这一切都在我的C#代码很好,但是我想把我的提供者连接到MVC中以使用[Authorize]过滤器:

[Authorize (Users="user1,user2",Roles="role8")]
public ViewResult MyResult(int X) {
    // implement
}

我知道通常的方式告诉ASP.NET关于一个自定义的成员资格或角色提供程序是在web.config文件如下,但如果我这样做ASP.NET将尝试调用默认的构造函数,这将不起作用。任何帮助赞赏。

<membership>
 <providers>
  <clear/>
  <add name="MymembershipProvider" type="MymembershipProvider">
 </providers>
</membership>

解决方法

最简单的方法是使用ASP.NET的标准机制< membership>在web.config中。你只要让它使用默认的构造函数,但是你可以覆盖Initialize()并在其中拉取依赖项。使用 this作为参

就个人来说,由于这样的事情,我宁愿完全避免提供者的模式,所以我使用类似于described in the MonoRail docs的方法。嗯,它不那么blo肿,更灵活。最后,它只是设置HttpContext.User与正确的IPrincipal实现,这是AuthorizeAttribute使用的。

我最近blogged about a solution to do proper IoC with MembershipProviders

大佬总结

以上是大佬教程为你收集整理的asp.net-mvc – 如何将IoC成员资格提供程序与ASP.NET MVC集成全部内容,希望文章能够帮你解决asp.net-mvc – 如何将IoC成员资格提供程序与ASP.NET MVC集成所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。