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

本文关键字:适用于 不适用 FilterAttribute Controller DependencyAttribute Unity | 更新日期: 2023-09-27 18:15:40

我已经在我的WebAPI项目中设置了Unity,当我在我的ApiControllers之一中使用DependencyAttribute时,我正在正确地注入对象。我现在正试图在ActionFilterAttribute中使用完全相同的方法,但它没有解析(解析为null)。

解析为null:

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

,它解析为对象的一个实例:

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

和我的UnityConfig看起来像这样:

container.RegisterType<IUserStore<ApplicationUser, int>, ApplicationUserStore>();
container.RegisterType<ApplicationUserManager>();

我错过了什么?

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

你可以改变你的方法来设计过滤器,使他们被动,然后使用真正的依赖注入(构造函数注入)的动作过滤器被设计为读取他们,如在这个IActionFilter的例子或在这个AuthorizeAttribute的例子中所示。

或者,您可以像这里所示的那样破解框架,以获得对动作过滤器属性的属性注入。但是这样你就被属性注入和随之而来的所有缺点所困住了。