我知道使用Ninject 1,可以根据参数名称给出特定的实例。
E.g public SomeClass(ISomething left,ISomething right) {}
会将ISomething解析为默认的ISomething,但ISomething会将其解析为不同的绑定。
如何使用Ninject 2+执行此操作?
注意:我不想使用[Named(“XZ”)],因为这会迫使我使我的应用程序的主dll成为Ninject的依赖项。现在我有一个单独的DLL CompositionRoot依赖于Ninject,没有别的:我的主dll可以在没有Ninject的情况下使用。我想保持这种方式。
编辑:我在第一个答案后更新了示例以使用左/右而不是简单/复杂。我不想在继承结构中硬编码这种依赖。
答案 0 :(得分:3)
我明白了:
Bind<ISomething >().To<LeftSomething>().When(a => a.Target.Name == "left");
答案 1 :(得分:2)
为什么不创建派生接口ISimpleSomething
和IComplexSomething
?
这样你就可以为每个人提供额外的功能。
interface ISomething { ... }
interface IComplexSomething : ISomething { ... }
interface ISimpleSomething : ISomething { ... }