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 – 如何使WebAPI操作只能从我的应用程序访问?
- 在ASP.Net MVC和IIS 7.5中设置最佳http缓存头和服务器参数
- asp.net – .NET中的堆栈溢出将IIS发送到100%的CPU使用率
- 在ASP.NET中使用新的会话ID打开一个新的浏览器窗口
- asp.net-mvc-4 – 高级WebGrid教程或解决方案
- asp.net – IIS 8 – 默认文档 – 找不到资源
- .net – 带有数据绑定控件的“无效的回发或回调参数”
- asp-classic – 经典ASP的好IDE?
- asp.net-mvc – 如何在视图中的脚本部分中包含脚本包
- 当通过ASP.NET成员资格检查用户角色时,SemaphoreFullExcept
- 如何在asp.net中实现文件下载
- asp.net – 如何设置显示内联的Div元素的固定宽度
- ef-code-first – 在WebAPI Controller中序列化E
- 如何通过ASP.NET MVC上传文件并显示进度条?
- asp.net-mvc – Web API和ASP MVC之间的主要区别
- asp.net-mvc – RedirectToAction导致在ASP.NET
- asp.net-mvc-4 – 使用MVC 4 SimpleMembership与
- asp.net-mvc – 为现有项目添加标识
- 一般来说,MVC3或ASP.NET中的静态网站生成器
- asp.net-mvc – 是否可以在每页捆绑脚本和样式
