asp.net-mvc – 如何在MVC Filter属性中解析依赖注入
我有一个从AuthorizationAttribute派生的自定义属性类,它执行控制器操作的自定义安全性. OnAuthorizationCore方法取决于各种其他组件(例如DAL),以便判断用户是否可以调用动作.
我使用Autofac进行依赖注入. ExtensibleActionInvoker声称能够对动作过滤器执行属性注入.在运行时设置属性的属性(这似乎是一个坏主意)可以在一个简单的单元测试中工作,但是在一个繁忙的多线程Web服务器中,它必然会出错,所以这个想法似乎是一个反模式.因此这个问题: 如果我的AuthorizationAttribute依赖于其他组件才能正常工作,为什么要正确的[架构]模式才能实现? 即AuthorizationAttribute取决于IUserRepository …如何解决这种关系? 解决方法
正确 – 但不要将操作过滤器与可能无法实现的属性混淆.在ASP.NET MVC中最简单的方法是分担责任,即使MVC框架允许您组合它们. 例如,使用一对类 – 只保存数据的属性类: // Just a regular old attribute with data values class SomeAttribute : Attribute { ... } 还有一个注入了依赖关系的过滤器: // Gets dependencies injected class SomeFilter : IActionFilter { ... } SomeFilter仅使用通过GetCustomAttributes()从控制器或操作方法获取SomeAttribute属性来执行任何需要的工作的典型方法. 然后,您可以使用ExtensibleActionInvoker连接过滤器: builder.RegisterControllers(...).InjectActionInvoker(); builder.RegisterType<ExtensibleActionInvoker>().As<IActionInvoker>(); builder.RegisterType<SomeFilter>().As<IActionFilter>(); 它可能比使用属性为过滤器方法编写的代码要多一些,但从长远来看,代码的质量会更好(例如,通过避免属性的限制和服务定位器解决方案的尴尬.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC – 出错时的声明性重定向
- 如何在ASP.NET表中创建thead和tbody?
- 是否有开源的Asp.net会员管理GUI(如netwebadmin,但在线工作
- asp.net – 仅用于字母和数字的正则表达式验证器
- asp.net-mvc-3 – ASP.Net MVC 3多个CheckBoxLists
- asp.net-mvc – 使用自定义[required]属性时使用客户端验证
- asp.net-mvc – 没有html值的Razor属性
- 实体框架 – 我们如何使用Breeze的本地时区生存
- asp.net – 如何在更新面板刷新后运行一些javascript?
- ASP.NET MVC在httpPost之后返??回Index视图
- asp.net-mvc-3 – MVC 3:AutoMapper和项目/解决
- asp.net-web-api – ASP.NET Web API – 具有多个
- asp.net-mvc-4 – 如何使用业务标识提供程序(例如
- asp.net-mvc – .NET MVC4 Facebook,Google和Twi
- asp.net-mvc – 获取ASP.Net MVC中任何文件的完整
- asp.net-mvc – Unity和Random“索引超出了数组的
- asp.net-mvc – Asp.Net MVC Ajax.BeginForm没有
- asp.net-mvc – 如何更新实体框架连接字符串
- asp.net – ASP .NET核心Cookie身份验证到期时返
- asp.net-web-api – 在Windows服务中使用OWIN托管