Asp.net-Mvc
為依賴注入設置過濾器屬性以接受建構子中的參數
我正在關注此頁面上的 ninject 過濾器屬性設置。
對他們來說,他們有:
.WithConstructorArgumentFromControllerAttribute<LogAttribute>( "logLevel", attribute => attribute.LogLevel);第二個參數期望一個
Func<LogAttribute, object> callback. 他們的實際參數列表設置如下:Log(LogLevel = Level.Debug)但我的過濾器屬性設置如下:
public class AuthAttribute : FilterAttribute { } public class AuthFilter : IAuthorizationFilter { private readonly IUserService userService; private string[] roles; //Stuck on the constructor also. How do I accept params? public AuthFilter(IUserService userService, params string[] roles) { this.userService = userService; this.roles = roles; } public void OnAuthorization(AuthorizationContext filterContext) { throw new NotImplementedException(); } }不知何故,這是錯誤的。因為我希望我的過濾器看起來像:
[Auth("Admin", "Contrib")]我的綁定:
kernel.BindFilter<AuthFilter>(FilterScope.Controller, 0) .WhenControllerHas<AuthAttribute>() .WithConstructorArgumentFromControllerAttribute<AuthAttribute>("roles", /*Stuck here*/)
您需要將角色變成屬性中的屬性。
屬性:
public class AuthAttribute : FilterAttribute { public string[] Roles { get; set; } public AuthAttribute(params string[] roles) { this.Roles = roles; } }篩選:
public class AuthFilter : IAuthorizationFilter { private readonly IUserService userService; private readonly string[] roles; public AuthFilter(IUserService userService, string[] roles) { this.userService = userService; this.roles = roles; } public void OnAuthorization(AuthorizationContext filterContext) { //do stuff } }控制器
[AuthAttribute("a", "b")] public class YourController : Controller { }捆綁:
kernel.BindFilter<AuthFilter>(FilterScope.Controller, 0) .WhenControllerHas<AuthAttribute>() .WithConstructorArgumentFromControllerAttribute<AuthAttribute>("roles", attribute => attribute.Roles);