2017-02-21 44 views
0

Я с помощью: Действия - инъекции зависимостей

using Microsoft.Extensions.DependencyInjection; 

Когда я пытаюсь создать новый ActionFilter мне нужно иметь доступ к другим услугам, поэтому я стараюсь писать стандартный конструктор инъецировать, но когда мой costructor имеет параметры, я должен написать что-то вроде этого:

[OAuthFilter(serviceToInject)] 

Я не могу этого сделать фильтры действия не могут иметь такие параметры.

Что мне делать? Фильтры действий не могут иметь конструкторы инъекций?

+0

Возможный дубликат: https://stackoverflow.com/questions/29915192/property- injection-on-attributes – Steven

+0

@Steven, что для ASP.NET MVC или ASP.NET 4, это ASP.NET Core –

+0

@CamiloTerevinto: Ответ по-прежнему остается прежним: сделайте свои атрибуты либо [пассивными] (http: // blog.ploeh.dk/2014/06/13/passive-attributes/) или [Humble objects] (http://xunitpatterns.com/Humble%20Object.html). – Steven

ответ

1

Вы можете использовать TypeFilterAttribute:

[TypeFilter(typeof(OAuthFilter))] 
public class HomeController : Controller 
{ 
} 

Это будет создать экземпляр фильтра и получить все необходимые компоненты через инъекции зависимостей. Другой альтернативой является ServiceFilterAttribute:

[ServiceFilter(typeof(OAuthFilter))] 
public class HomeController : Controller 
{ 
} 

Но это требует, чтобы вы добавить фильтр в коллекцию услуг:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddTransient<OAuthFilter>(); 
}