【发布时间】:2019-05-16 18:26:42
【问题描述】:
我对此问题有一个后续问题:Is it possible to bind different interfaces to the same instance of a class implementing all of them?
我有一个场景,其中一个接口需要通过“命名”扩展提供的名称来解析,而另一个不需要解析名称。
例如
public interface IMachine { }
public interface IDrillMachine : IMachine { }
public class Drill: IDrillMachine { }
public class ScrewDriver: IMachine { }
Ninject 绑定
Bind<IMachine, IDrillMachine>().To<Drill>().Named("Drill");
Bind<IMachine>.To<ScrewDriver>().Named("ScrewDriver");
注入
public class MachineConsumer
{
public MachineConsumer([Named("Drill")]IMachine drillMachine)
{ }
}
public class DrillConsumer
{
public DrillConsumer(IDrillMachine drillMachine)
{ }
}
我的代码不能正常工作,所以无法测试。但是我认为在解析IDrillMachine的时候会出现混乱,不是吗?
【问题讨论】:
-
不确定这是否是问题所在,但在查看链接问题的已接受答案后,您似乎在 Ninject 绑定中错过了对
.InSingletonScope()的调用。 -
添加
.InSingletonScope()的唯一区别是我将获得一个实例,而不是DrillMachine的新实例。最初的问题仍然存在,即 Ninject 是否能够解决IDrillMachine并给我一个DrillMachine的实例?