加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在MVC Filter属性中解析依赖注入

发布时间:2020-12-15 23:25:49 所属栏目:asp.Net 来源:网络整理
导读:我有一个从AuthorizationAttribute派生的自定义属性类,它执行控制器操作的自定义安全性. OnAuthorizationCore方法取决于各种其他组件(例如DAL),以便判断用户是否可以调用动作. 我使用Autofac进行依赖注入. ExtensibleActionInvoker声称能够对动作过滤器执行
我有一个从AuthorizationAttribute派生的自定义属性类,它执行控制器操作的自定义安全性. OnAuthorizationCore方法取决于各种其他组件(例如DAL),以便判断用户是否可以调用动作.

我使用Autofac进行依赖注入. ExtensibleActionInvoker声称能够对动作过滤器执行属性注入.在运行时设置属性的属性(这似乎是一个坏主意)可以在一个简单的单元测试中工作,但是在一个繁忙的多线程Web服务器中,它必然会出错,所以这个想法似乎是一个反模式.因此这个问题:

如果我的AuthorizationAttribute依赖于其他组件才能正常工作,为什么要正确的[架构]模式才能实现?

即AuthorizationAttribute取决于IUserRepository …如何解决这种关系?

解决方法

The ExtensibleActionInvoker claims to be able to perform property injection on action filters.

正确 – 但不要将操作过滤器与可能无法实现的属性混淆.在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>();

它可能比使用属性为过滤器方法编写的代码要多一些,但从长远来看,代码的质量会更好(例如,通过避免属性的限制和服务定位器解决方案的尴尬.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读