Ninject v2 +注入取决于参数名称

时间:2013-09-12 12:06:13

标签: c# .net parameters dependency-injection ninject

我知道使用Ninject 1,可以根据参数名称给出特定的实例。

E.g     public SomeClass(ISomething left,ISomething right)     {}

会将ISomething解析为默认的ISomething,但ISomething会将其解析为不同的绑定。

如何使用Ninject 2+执行此操作?

注意:我不想使用[Named(“XZ”)],因为这会迫使我使我的应用程序的主dll成为Ninject的依赖项。现在我有一个单独的DLL CompositionRoot依赖于Ninject,没有别的:我的主dll可以在没有Ninject的情况下使用。我想保持这种方式。

编辑:我在第一个答案后更新了示例以使用左/右而不是简单/复杂。我不想在继承结构中硬编码这种依赖。

2 个答案:

答案 0 :(得分:3)

我明白了:

Bind<ISomething >().To<LeftSomething>().When(a => a.Target.Name == "left");

答案 1 :(得分:2)

为什么不创建派生接口ISimpleSomethingIComplexSomething

这样你就可以为每个人提供额外的功能。

interface ISomething { ... }
interface IComplexSomething : ISomething { ... }
interface ISimpleSomething : ISomething { ... }