C# 如何在ASP.NET Web API上向操作筛选器注入依赖项

C# 如何在ASP.NET Web API上向操作筛选器注入依赖项,c#,asp.net-web-api,dependency-injection,ioc-container,asp.net-web-api-filters,C#,Asp.net Web Api,Dependency Injection,Ioc Container,Asp.net Web Api Filters,我真的陷入了将依赖注入web api的动作过滤器的方法中。我有这样一个动作过滤器: public class AuthorizationAttribute : ActionFilterAttribute { public IApiKeyRepository Repository { get; set; } private Guid GetApiKey(string customerKey) { return Repository.GetApiKey(cu

我真的陷入了将依赖注入web api的动作过滤器的方法中。我有这样一个动作过滤器:

public class AuthorizationAttribute : ActionFilterAttribute
{
    public IApiKeyRepository Repository { get; set; }

    private Guid GetApiKey(string customerKey)
    {
        return Repository.GetApiKey(customerKey);
    }

    public override void OnActionExecuting(HttpActionContext actionContext)
    {        
    }
}
我想使用Windsor在属性存储库上进行属性注入(但使用哪个IoC容器并不重要)


我是来定制FilterProvider的,但对我来说并没有效果,有人对此有解决方案或运行代码吗?非常感谢您使用Ninject.Web.WebApi程序集(显然使用Ninject作为IoC)来实现这一点。我建议您通过查看source和SampleApplication来了解它们是如何完成过滤器注入的。

您需要检查具体的IOC实现。IOC容器(如NInject和Autofac)通过注入公共属性具有某种类型的过滤器注入。我不确定Windsor,但这里有一个链接,创建了一个可能有助于Windsor:的包装器,以及另一篇直接解决Windsor:问题的文章

对于NInject和Autofac的完整性:

NInject:

自动传真:

**编辑-附加选项**


您应该能够从任何筛选器执行
全局配置.Configuration.DependencyResolver.GetService(…)
,无论您使用的是IOC容器。

对于WebAPI和AutoFac,您可以使用:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

文档是。

谢谢你的回答,Alex,但是你展示的大部分链接都是针对MVC的,不是针对Web API的,我认为Web API和MVC之间的do注入有点不同。我用Autofac成功地做到了这一点,但无法与其他人交流。您还应该能够通过GlobalConfiguration.Configuration.DependencyResolver.GetService(…)直接从筛选器访问所需的服务。不太理想,但它应该可以工作。您能概述一下使用
Ninject.Web.WebApi
完成过滤器注入的步骤吗?SampleApplication没有太大帮助。下面是SampleApplication中LogFilter如何工作的一个很好的概述-