【发布时间】:2023-11-27 20:22:01
【问题描述】:
我有一个界面:
public interface IService
{
void DoStuff(int parm1, string parm2, Guid gimmeABreakItsAnExampleK);
}
我想配置 Ninject (v3) 绑定,以便我可以有一个“调度程序”随机播放方法调用IService 的多个实例,如下所示:
public sealed class DispatcherService : IService
{
private IEnumerable<IService> _children;
public DispatcherService(IEnumerable<IService> children)
{
this._children = children.ToList();
}
public void DoStuff(int parm1, string parm2, Guid gimmeABreakItsAnExampleK)
{
foreach(var child in this._children)
{
child.DoStuff(parm1, parm2, gimmeABreakItsAnExampleK);
}
}
}
但是,我的绑定,看起来像这样,最终会在运行时抛出异常,指示循环依赖:
this.Bind<IService>().To<DispatcherService>();
this.Bind<IService>().To<SomeOtherService>()
.WhenInjectedExactlyInto<DispatcherService>();
this.Bind<IService>().To<YetAnotherService>()
.WhenInjectedExactlyInto<DispatcherService>();
这可能吗?如果是这样,我做错了什么?忍者能否逃脱这种循环依赖的厄运?
【问题讨论】:
-
为什么需要
WhenInjectedExactlyInto,为什么不只需要To? -
因为
WhenInjectedExactlyInto防止SomeOtherService和YetAnotherService被注入除DispatcherService之外的任何东西。我使用了类似的方法来“包装”(参见*.com/questions/6752674/…),但我正试图让它适用于多注入情况。 -
您是否查看过各种 Event Broker 扩展 - 它们都做了您的示例所做的深入研究。好吧,你说这只是一个例子,我会安静的!
标签: c# .net dependency-injection ninject ioc-container