Подтвердить что ты не робот

Как сделать инъекцию зависимостей в Action Filter на веб-API ASP.NET

Я действительно зацикливаюсь на подходе, чтобы сделать инъекцию зависимостей в фильтр действий веб-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, но для меня это не сработало, есть ли у кого-нибудь решение или запуск кода? он будет очень признателен

4b9b3361

Ответ 1

Вам нужно проверить свою конкретную реализацию МОК. Контейнеры IOC, такие как NInject и Autofac, имеют некоторый тип инъекции фильтра, вводя публичные свойства. Windsor Я не уверен, но вот ссылка, которая создает обертку, которая может помочь с Виндзором: 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:

** EDIT - дополнительная опция **

Вы должны иметь возможность делать GlobalConfiguration.Configuration.DependencyResolver.GetService(...) из любого фильтра независимо от используемого вами контейнера IOC.

Ответ 2

Для WebAPI и AutoFac вы можете использовать:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

Документация здесь.

Ответ 3

Вы можете использовать сборку Ninject.Web.WebApi(очевидно, используя Ninject как IoC), чтобы сделать эту работу. Я бы предложил посмотреть источник и SampleApplication через https://github.com/ninject/Ninject.Web.WebApi, чтобы увидеть, как они выполняют инъекцию фильтра.