Dependency injection 依赖注入如何知道在注入接口时使用哪种类型的映射

Dependency injection 依赖注入如何知道在注入接口时使用哪种类型的映射,dependency-injection,inversion-of-control,ninject,autofac,Dependency Injection,Inversion Of Control,Ninject,Autofac,我一直在阅读dependencey注入,我读了很多关于如何通过构造函数对接口进行injection的内容。它如何知道该接口使用哪种类型的映射?例如,如果我有一个名为proteinservice的服务和另一个名为VitaminService的服务,这两个服务都实现了一个名为ISupplement服务的接口,那么我可以将ISupplement服务注入我的控制器,例如,但我不确定它如何知道是使用Protein还是VitaminService。这仅仅取决于所使用的国际奥委会的类型吗?非常感谢您的建议,因

我一直在阅读dependencey注入,我读了很多关于如何通过构造函数对接口进行injection的内容。它如何知道该接口使用哪种类型的映射?例如,如果我有一个名为proteinservice的服务和另一个名为VitaminService的服务,这两个服务都实现了一个名为ISupplement服务的接口,那么我可以将ISupplement服务注入我的控制器,例如,但我不确定它如何知道是使用Protein还是VitaminService。这仅仅取决于所使用的国际奥委会的类型吗?非常感谢您的建议,因为我对此有点困惑。

您可以告诉容器使用什么。因此,在Structuremap中:

() .使用(); 告诉容器在使用iSuppline接口时使用VitaminService

您可以注册多个实现:

For().Use().Named(“V”);
For().Use().Named(“P”);
但是在这种情况下,您需要告诉容器您想要哪个实现:

Container.GetInstance(“V”);

Cool我不知道你可以这么做..这不是一种服务定位器类型的方法而不是依赖注入方法吗?@tman-Autofac支持基于附加元数据(如名称)的注入因此,您不必直接访问容器。@t只有在您对容器有多个实际解析调用时,它才会成为服务定位器。只要在容器设置过程中只使用不同的命名注册,就不会损害DI原则。配置容器后,您可以从合成根目录引导它。