18

我真的被卡在依賴注入到web api的action filter的方法上。我有一個動作過濾器是這樣的:如何在ASP.NET Web API上對Action Filter執行依賴注入

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

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

    public override void OnActionExecuting(HttpActionContext actionContext) 
    {   
    } 
} 

我想用溫莎做對物業庫屬性注入(但它並不重要IoC容器時)

我沒上來自定義FilterProvider,但它沒有爲我工作,有沒有人有解決方案或在這個運行代碼?它將不勝感激

回答

1

您可以使用Ninject.Web.WebApi程序集(顯然使用Ninject作爲IoC)來完成這項工作。我建議通過https://github.com/ninject/Ninject.Web.WebApi查看源代碼和SampleApplication,看看它們是如何完成Filter注入的。

+0

您可以概述使用'Ninject.Web.WebApi'完成過濾器注入的步驟嗎? SampleApplication不是很有幫助。 –

+0

以下是關於SampleApplication中的LogFilter如何工作的一個很好的概述 - https://github.com/ninject/Ninject.Web.WebApi/wiki/Dependency-injection-for-filters –

4

您需要檢查您的特定IOC實施。國際奧委會容器如NInject和Autofac通過注入公共屬性來進行某些類型的過濾器注入。溫莎我不確定,但這是一個鏈接,創建一個可能有助於溫莎:http://eagle081183.wordpress.com/2010/09/21/dependency-injection-with-asp-net-mvc-action-filters/和另一篇文章直接解決與溫莎問題的包裝:http://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into-asp-net-mvc-actionfilters.aspx

爲了完整性與NInject和Autofac:

NInject:

Autofac:

**編輯 - 附加選項**

你應該能夠從任何過濾器做GlobalConfiguration.Configuration.DependencyResolver.GetService(...)無論您使用的是IOC容器。

+0

對於AutoFac而言,它匹配很好地與WebAPI – leon

+2

謝謝你的回答亞歷克斯,但你展示的大部分鏈接是針對MVC,而不是針對Web API,我認爲它與Web API和MVC之間的注入有點不同。 –

+0

我已經使用Autofac成功完成了這項工作,但無法與其他人交流。您還應該能夠通過GlobalConfiguration.Configuration.DependencyResolver.GetService(...)直接從過濾器訪問您想要的服務。不理想,但它應該工作。 – AlexGad

4

有關的WebAPI和AutoFac你可以使用:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration); 

文檔是here