Sha*_*ean 7 asp.net-mvc ninject asp.net-mvc-3
我正在关注此页面上的ninject过滤器属性设置.
对他们来说,他们有:
.WithConstructorArgumentFromControllerAttribute<LogAttribute>(
"logLevel", attribute => attribute.LogLevel);
Run Code Online (Sandbox Code Playgroud)
第二个参数是期待a Func<LogAttribute, object> callback.他们的实际参数列表设置如下:
Log(LogLevel = Level.Debug)
Run Code Online (Sandbox Code Playgroud)
但我的filter属性设置如下:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
不知怎的,这是错误的.因为我希望我的过滤器看起来像:
[Auth("Admin", "Contrib")]
Run Code Online (Sandbox Code Playgroud)
我的绑定:
kernel.BindFilter<AuthFilter>(FilterScope.Controller, 0)
.WhenControllerHas<AuthAttribute>()
.WithConstructorArgumentFromControllerAttribute<AuthAttribute>("roles", /*Stuck here*/)
Run Code Online (Sandbox Code Playgroud)
B Z*_*B Z 16
您需要将角色添加到属性中的属性中.
属性:
public class AuthAttribute : FilterAttribute
{
public string[] Roles { get; set; }
public AuthAttribute(params string[] roles)
{
this.Roles = roles;
}
}
Run Code Online (Sandbox Code Playgroud)
过滤:
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
}
}
Run Code Online (Sandbox Code Playgroud)
调节器
[AuthAttribute("a", "b")]
public class YourController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)
捆绑:
kernel.BindFilter<AuthFilter>(FilterScope.Controller, 0)
.WhenControllerHas<AuthAttribute>()
.WithConstructorArgumentFromControllerAttribute<AuthAttribute>("roles", attribute => attribute.Roles);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |