dependency-injection - 使用 IOC 框架绑定(bind)到多个具体实现?

标签 dependency-injection inversion-of-control ioc-container

我对 DI/IOC 容器的概念比较熟悉,之前曾参与过已经使用它们的项目。然而,对于这个新项目,没有现有的框架,我必须选择一个。

长话短说,在某些情况下我们将为给定的接口(interface)配置多个实现。环顾网络,似乎使用任何主流框架来选择性地绑定(bind)到其中一个实现都非常简单。

但是,在某些情况下,我们需要运行所有已配置的实现。我已经在这里搜索了所有 IOC 标记的帖子,并尝试仔细阅读主要框架的文档(到目前为止,我们关注的是 Unity、Ninject 和 Windsor),但文档通常很少,我没有时间检查所有包的源代码。

那么,是否有任何主流 IOC 容器允许我绑定(bind)到我的服务之一的所有配置的具体类型?

最佳答案

第一次尝试解析注册类型的所有实现时,让我着迷的一件事是,当您调用 ResolveAll() 时,将不会返回未命名(默认)类型注册。仅返回命名实例。

所以:

IUnityContainer container = new UnityContainer();
container.RegisterType<IMyInterface, MyFirstClass>();
container.RegisterType<IMyInterface, MySecondClass>("Two");
container.RegisterType<IMyInterface, MyThirdClass>("Three");

var instances = container.ResolveAll<IMyInterface>();

Assert.AreEqual(2, instances.Count, "MyFirstClass doesn't get constructed");

关于dependency-injection - 使用 IOC 框架绑定(bind)到多个具体实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/315964/

相关文章:

java - Autowiring map 未按预期工作

asp.net-mvc - 使用 Simpleinjector 为 AccountController 注册 Identity Framework UserStore

c# - 设计 - 使用 Windsor 时应该在哪里注册对象

c# - 每个接口(interface)都显式实现? (涉及国际奥委会)

c# - 使用 'where' 谓词从 Windsor CaSTLe 中的 Assembly 注册类型

c# - 如何从静态类中解析命名实例?

java - 使用 Play Framework 在应用程序启动时实例化 Controller 中的变量

.net - 在 .NET 中调试依赖注入(inject)

android - 使用 Hilt 进行依赖注入(inject)时,如何将运行时参数传递给 ViewModel 的构造函数?

c# - Autofac:解析同名注册的 IEnumerable