0

我正在尝试进行上下文绑定,但无法将具体实现接口绑定为构造函数参数。忍者版本: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 时出错 没有匹配的绑定可用,并且类型不是自绑定的。

4

1 回答 1

0

您的示例代码使用绑定完成位置的本地值。我推测这是错误的 = 不是你想要的。

发生错误是因为When在解决绑定时没有任何条件匹配。或者换句话说:当 Ninject 被要求返回 anINotifier时,它将评估绑定的所有When条件,INotifier然后解析匹配的条件。

When仅当在运行时有时要实例化“A”而有时要实例化“B”时才应使用条件。如果在内核的实例化过程中已经知道要做什么,那么你应该像这样调整你的代码:

if(notifictionControl.ToLower() == "xnotification")
{
    Bind<INotifier>()...
}
else if(notifictionControl.ToLower() == "ynotification")
{
    Bind<INotifier>()...
}
else
{ 
    throw new Exception("invalid config");
}
于 2016-06-27T12:07:51.970 回答