asp.net-mvc – 如何将IoC成员资格提供程序与ASP.NET MVC集成
发布时间:2020-12-16 00:39:40 所属栏目:asp.Net 来源:网络整理
导读:我有一个在我的MVC控制器中使用的自定义成员资格/角色提供程序,我也希望能够访问ASP.NET MVC,所以我可以使用AuthorizationFilters等。由于有很多人实现了自定义提供程序,我想象很多人都做了这个,但是我没有想出来,也没有发现专门解决这个问题的帖子。 T
我有一个在我的MVC控制器中使用的自定义成员资格/角色提供程序,我也希望能够访问ASP.NET MVC,所以我可以使用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 – ASP.NET MVC检查用户是否属于[x]组
- asp.net-core-2.0 – .net标准2.0中的Dbgeography
- Asp.net web api 知多少
- asp.net-mvc – N2 for MVC – 如何让Zones工作?
- asp.net-mvc – asp.net mvc OnAuthorization和OnActionExe
- asp.net-mvc – 我的ASP.NET MVC应用程序是否正确构建?
- asp.net-mvc – 在asp.net mvc请求中捕获windows用户名
- asp.net – 是否可以将多个域/子域指向同一个网站,或者在一
- asp.net-core – 我可以提交MVC6视图组件吗?
- ASP.NET Core MVC 6中的默认,系统和Mi??crosoft LogLevels是
推荐文章
站长推荐
- asp.net-mvc – 如何在asp.net mvc视图中验证日期
- .net – 使用basicHttpBinding时使HTTPS工作
- 如何使用asp.net web.sitemap和菜单控件与bootst
- asp.net – 如何从HTTP请求获取MAC地址?
- asp.net – Web开发.NET最佳实践
- asp.net-mvc – MVC:覆盖默认的ValidationMessa
- asp.net-mvc – 为什么在为JavaScript分配Model值
- asp.net – 如何在Windows 10 / IIS 10上附加到I
- asp.net-mvc-2 – ASP.NET MVC路由和URL.Action
- 你如何获得asp.net控件的自动生成的name属性?
热点阅读