web-dev-qa-db-ja.com

ASP.NET WebAPIでアクションフィルターに依存性注入を行う方法

WebAPIのアクションフィルターに依存性注入を行うアプローチに本当に行き詰まっています。私はこのようなアクションフィルターを持っています:

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をカスタマイズするために思いついたのですが、うまくいきませんでした。誰かがこれに関する解決策や実行中のコードを持っていますか?それは大いに感謝されます

21
cuongle

WebAPIおよびAutoFacの場合、以下を使用できます。

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

ドキュメントは ここ です。

4
Vladimir

特定のIOC実装を確認する必要があります。IOC NInjectやAutofacなどのコンテナーには、パブリックプロパティを注入することにより、ある種のフィルター注入があります。ウィンザーについてはよくわかりません。 、ただし、ウィンザーに役立つ可能性のあるラッパーを作成するリンクは次のとおりです。 http://eagle081183.wordpress.com/2010/09/21/dependency-injection-with-asp-net-mvc-action-フィルタ/ およびウィンザーの問題に直接対処する別の記事: http://weblogs.asp.net/psteele/archive/2009/11/04/using-windsor-to-inject-dependencies-into -asp-net-mvc-actionfilters.aspx

NInjectとAutofacを完全に使用するには:

NInject:

Autofac:

**編集-追加オプション**

使用しているIOCコンテナーに関係なく、任意のフィルターからGlobalConfiguration.Configuration.DependencyResolver.GetService(...)を実行できるはずです。

4
AlexGad

Ninject.Web.WebApiアセンブリ(明らかにNinjectをIoCとして使用)を使用して、これを機能させることができます。 https://github.com/ninject/Ninject.Web.WebApi を介してソースとSampleApplicationを調べ、フィルターインジェクションをどのように実行しているかを確認することをお勧めします。

1
Paige Cook