我有一个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)RequestFilter请求
似乎Ninject误解了整数的枚举参数,但我对如何解决这个问题感到茫然。
答案 0 :(得分:0)
问题最终成为我用于绑定的方法:
this.BindFilter<ActivityFilter>(FilterScope.Action, 0)
.WhenActionMethodHas<Activity>()
.WithPropertyValueFromActionAttribute<Activity>("tags", a => a.Tags)
.WithPropertyValueFromActionAttribute<Activity>("directive", a => a.Directive);
我应该使用WithConstructorArgumentFromActionAttribute
因为我试图注入构造函数参数(我错误地认为Constructor / Property引用了值的 source ,而不是目的地。)
一旦我改变了它,它工作正常。