【问题标题】:Ninject can't bind an enum property to a filterNinject 无法将枚举属性绑定到过滤器
【发布时间】:2013-10-15 15:46:09
【问题描述】:

我有一个像这样设置的 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:激活 int 时出错 没有匹配的绑定可用,并且该类型不可自绑定。 激活路径:

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

1) ActivityFilter 请求

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

【问题讨论】:

    标签: c# enums ninject ninject.web


    【解决方案1】:

    问题最终出在我用于绑定的方法上:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2018-01-12
      相关资源
      最近更新 更多