2016-12-16 92 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

我不會擔心太多。它記錄不準,語法不好。 –