asp.net-web-api - 有没有办法通过属性而不是注入(inject)来使用 AutoFac Web Api 授权过滤器?

标签 asp.net-web-api filter dependency-injection authorization autofac

我有一个像这样的 Autofac Web Api 授权过滤器:

public class MyAuthorizationFilter : IAutofacAuthorizationFilter
{
    public void OnAuthorization(HttpActionContext actionContext){}
}

public class MyAuthorizationAttribute : Attribute
{
    public MyAuthorizationAttribute() { }
}

现在,我拥有 Autofac Web Api 授权过滤器的唯一方法是将其注入(inject) AutofacConfig.cs 中:

builder.RegisterType<MyAuthorizationFilter>()
.AsWebApiAuthorizationFilterFor<MyController>(
    c => c.MyMethod(default(MyModel))
).InstancePerDependency();

如果我不按照上面的方式注入(inject)该属性,它似乎会被忽略

public MyController : ApiController {

    [MyAuthroziationFilter] // ignored
    [POST("")]
    public HttpResponseMessage MyMethod(MyModel myModel) { 
        [...]
    }
}

有没有办法使用 AutoFac Web Api 授权过滤器的属性/注释而不是通过 AutoFac 进行注入(inject),并正确注入(inject)它们的依赖项?

最佳答案

不幸的是,如果您希望在过滤器中使用 DI,则无法使用属性。 Per the docs :

Unlike the filter provider in MVC, the one in Web API does not allow you to specify that the filter instances should not be cached. This means that all filter attributes in Web API are effectively singleton instances that exist for the entire lifetime of the application.

如果您想使用属性,最好的办法是在标准 Web API 属性中使用服务位置。从请求消息中获取请求生命周期范围并手动解析您需要的服务。

关于asp.net-web-api - 有没有办法通过属性而不是注入(inject)来使用 AutoFac Web Api 授权过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30669509/

相关文章:

asp.net - Visual Studio 2012中缺少ASP.NET Web应用程序模板

java - 应用比较器和谓词的顺序重要吗?

ruby-on-rails - "The Ruby way"(mixins 和类重新打开)与依赖注入(inject)

java - 多语言组件/类 [OOP/Patterns/IoC/DI]

php - Symfony2 在测试中访问私有(private)服务

c# - ASP Identity 和 Owin - token 生成

asp.net - 我应该在哪里保存由 ASP.NET Web API 动态生成的文件?

c# - 在 Visual Studio 的同一端口上运行两个应用程序

javascript - Ember.js - 如何过滤模型?

github - 如何过滤合并并关闭但分支尚未删除的Github PR