我对 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/