我正在尝试进行上下文绑定,但无法将具体的实现接口绑定为构造函数参数。 Ninject版本:3.2.0.0
我的结构如下:
INotifier 1. XNotifier 2. YNotifier
IPublisher 1. APublisher 2. BPublisher
其中XNotifier和YNotifier采用IPublisher类型的构造函数参数。
这是我的绑定:
Bind<INotifier>()
.To<XNotifier>()
.When(x => notifictionControl.ToLower() == "xnotification" )
.WithConstructorArgument("Publisher",ctx=>Kernel.Get<IPublisher>());
Bind<INotifier>()
.To<YNotifier>()
.When(x => notifictionControl.ToLower() == "ynotification" )
.WithConstructorArgument("Publisher", ctx => Kernel.Get<IPublisher>());
用法:
IParameter parameter = new ConstructorArgument("Publisher", publisher);
var notifier = kernel.Get<INotifier>(parameter);
但是收到以下错误:
激活INotifier时出错 没有匹配的绑定可用,并且该类型不可自我绑定。
答案 0 :(得分:0)
您的示例代码使用了绑定完成位置的本地值。我推测这是错误的=不是你想要的。
发生错误是因为在解析绑定时没有When
条件匹配。
换句话说:当Ninject被要求返回INotifier
时,它将评估When
绑定的所有INotifier
条件,然后解析匹配的那个。{ / p>
When
条件只应在运行时使用时有时想要实例化&#34; A&#34;和其他时间&#34; B&#34;。如果在内核实例化过程中它已经知道要做什么,那么你应该调整你的代码:
if(notifictionControl.ToLower() == "xnotification")
{
Bind<INotifier>()...
}
else if(notifictionControl.ToLower() == "ynotification")
{
Bind<INotifier>()...
}
else
{
throw new Exception("invalid config");
}