2016-12-16 2 views
1

Я не могу понять, как выполнить следующие действия:
У меня есть атрибут:ActionAttribute DI

public class Authorize : ActionFilterAttribute 
    { 
     private readonly IAccessPermissionRepository _repository; 

     public Authorize(IAccessPermissionRepository repository) 
     { 
      _repository = repository; 
     } 
     ... 
    } 

В IAccessPermissionRepository разрешен по умолчанию IoC
и я использую его в классе контроллера, как этот

[ServiceFilter(typeof(Authorize))] 
     public IActionResult Index() 

, но теперь я хочу передать дополнительные параметры конструктору, разные для каждого действия и контроллера. Обычно я просто использовал бы конструктор для этого, но ... понимаете.

+0

Это старая дискуссия, и я не достаточно хорошо знаком с Ядра предложить намного больше информации, но https://github.com/aspnet/Mvc/issues/1582, похоже, спрашивает то же, что и вы, и имеет обходное решение в комментариях. – Stijn

ответ

2

используется TypeFilter вместо ServiceFilter, например, так:

[TypeFilter(typeof(HasDummyPrivilegeAttribute), Arguments = new object[] { "dummyId" })] 

И HasDummyPrivilegeAttribute выглядит следующим образом:

public class HasDummyPrivilegeAttribute : ActionFilterAttribute 
{ 
    private readonly string _idParameterName; 
    private readonly IAccessPermissionRepository _repo; 

    public HasServicePrivilegeAttribute(
     string idParameterName, 
     [FromServices] IAccessPermissionRepository repo) 
    { 
     _idParameterName = idParameterName; 
     _repo = repo; 
    } 

    public override void OnActionExecuting(ActionExecutingContext context) 
    { 
     //TODO Something awesome here with _idParameterName and _repo 
    } 
} 
+0

Спасибо, не могу поверить, что я пропустил это. – quin61

+0

Я бы не стал слишком беспокоиться об этом. Это плохо документировано, и синтаксис плох. –

Смежные вопросы