Unity DependencyAttribute适用于Controller但不适用于FilterAttribute

时间:2015-10-01 23:23:47

标签: c# asp.net asp.net-web-api dependency-injection unity-container

我已经在我的WebAPI项目中设置了Unity,并且在我的一个ApiControllers中使用JSON.parse('{"Test": {"Foo": 1, "Bar": 2} }', function(prop, value) { var lower = prop.toLowerCase(); if(prop === lower) return value; else this[lower] = value; }); 时,我正在正确地注入对象。我现在尝试在DependencyAttribute中使用完全相同的方法,但它没有解析(解析为null)。

这解析为null:

ActionFilterAttribute

这解析为对象的实例:

public class ValidateEntryAttribute : ActionFilterAttribute
{
    [Dependency]
    internal ApplicationUserManager UserManager { get; set; }
    // ...
}

我的UnityConfig看起来像这样:

public class LayoutController : BaseApiController
{
    [Dependency]
    internal ApplicationUserManager UserManager { get; set; }
}

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您可以更改设计过滤器的方法以使它们passive,然后对用于读取它们的操作过滤器使用真正的依赖注入(构造函数注入),如this IActionFilter example或{ {3}}

或者,您可以按照this AuthorizeAttribute example所示的方式破解框架,以便在操作过滤器属性上获取属性注入。但是随后你会陷入财产注入以及随之而来的所有here