asp.net-mvc - 为依赖注入(inject)设置过滤器属性以接受构造函数中的参数

标签 asp.net-mvc asp.net-mvc-3 ninject

我正在关注此 page 上的 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")]

我的绑定(bind):
 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
  }
}

Controller
   [AuthAttribute("a", "b")]
   public class YourController : Controller 
   {

   }

捆绑:
kernel.BindFilter<AuthFilter>(FilterScope.Controller, 0)
            .WhenControllerHas<AuthAttribute>()
            .WithConstructorArgumentFromControllerAttribute<AuthAttribute>("roles", attribute => attribute.Roles);

关于asp.net-mvc - 为依赖注入(inject)设置过滤器属性以接受构造函数中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205187/

相关文章:

asp.net-mvc - ASP.NET MVC3,为什么即使在强类型 View 中下拉列表也依赖viewbag

c# - 如何将复杂类型传递给 Html.LabelFor?

c# - 数据库验证错误。在一个表中允许空值,但在相关(规范化)表中不允许空值

validation - 如何在 $.ajax() 中或之前强制进行客户端验证

ninject - Kernel.Inject(instance); 是什么?实际上呢?

asp.net - 如何使用 Ninject 注入(inject)依赖项,其中实例从 json 反序列化

asp.net-mvc - ASP.NET MVC 登录成功后未登录

jquery - ASP.NET MVC + 使用 jquery ajax 发送编码字符串

asp.net-mvc - mvc Controller 中 JsonResult 的最大大小是多少

asp.net-mvc - F# 中具有可选参数的 MVC Controller