Ninject 无法将枚举属性绑定到筛选器

本文关键字:绑定 筛选 属性 枚举 Ninject | 更新日期: 2023-09-27 18:35:22

我有一个MVC属性设置如下:

public class Activity : FilterAttribute
{
    public string[] Tags { get; set; }
    public Directive Directive { get; set; }
}

和相应的过滤器类

public class ActivityFilter : IActionFilter
{
    public ActivityFilter(IService service, IEnumerable<string> tags, Directive directive)
    {
       ...
    }
}

我用于过滤注入的属性的绑定如下所示:

this.BindFilter<ActivityFilter>(FilterScope.Action, 0)
  .WhenActionMethodHas<Activity>()
  .WithPropertyValueFromActionAttribute<Activity>("tags", a => a.Tags)
  .WithPropertyValueFromActionAttribute<Activity>("directive", a => a.Directive);

当我尝试调试我的网站时,我收到来自 Ninject 的错误,指出它无法激活 ActivityFilter 因为没有匹配的绑定可用于 int,特别是:

激活

异常:激活 int 时出错 没有匹配的绑定可用,并且类型不可自绑定。 激活路径:

2) 将依赖 int 注入到类型为 ActivityFilter 的构造函数的参数指令中

1) 请求活动过滤器

Ninject似乎误解了整数的枚举参数,但我对如何解决这个问题感到茫然。

Ninject 无法将枚举属性绑定到筛选器

问题最终是我用于绑定的方法:

this.BindFilter<ActivityFilter>(FilterScope.Action, 0)
   .WhenActionMethodHas<Activity>()
   .WithPropertyValueFromActionAttribute<Activity>("tags", a => a.Tags)
   .WithPropertyValueFromActionAttribute<Activity>("directive", a => a.Directive);

我应该使用WithConstructorArgumentFromActionAttribute因为我试图注入构造函数参数(我错误地认为构造函数/属性指的是值的来源,而不是目的地

一旦我改变了它,它工作正常。