0

我有一个像这样设置的 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 的匹配绑定,特别是:

ActivationException: Error activation int 没有匹配的绑定可用,并且类型不是自绑定的。激活路径:

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

1) 请求 ActivityFilter

似乎 Ninject 误解了整数的枚举参数,但我不知道如何解决这个问题。

4

1 回答 1

0

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

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

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

一旦我改变了它,它工作得很好。

于 2013-10-15T20:29:47.577 回答