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