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

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 如何在MVC Filter属性中解析依赖注入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个从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>();

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

原文链接:https://www.f2er.com/aspnet/250353.html

猜你在找的asp.Net相关文章