2016-12-16 98 views
1

我无法弄清楚如何做到以下几点:
我有一个属性:ActionAttribute DI

public class Authorize : ActionFilterAttribute 
    { 
     private readonly IAccessPermissionRepository _repository; 

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

的IAccessPermissionRepository默认情况下,国际奥委会
解决,我用它在控制器类这样

[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

我不会担心太多。它记录不准,语法不好。 –