【发布时间】:2016-06-27 08:59:48
【问题描述】:
我正在尝试进行上下文绑定,但无法将具体实现接口绑定为构造函数参数。 忍者版本:3.2.0.0
我的结构如下:
INotifier 1. XNotifier 2. YNotifier
IPublisher 1.出版商 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 时出错 没有匹配的绑定可用,并且类型不是自绑定的。
【问题讨论】:
-
为什么要把参数传入
Get<INotifier>? -
@MaKCbIMKo : 实现 INotifier 的类的构造函数期望 IPublisher 的具体实现。
-
但是您已经在绑定中指定了构造函数参数。为什么你又这样做了?
-
@MaKCbIMKo:感谢您的更正。
标签: c# ninject ioc-container ninject-extensions contextual-binding