2

我相对比较熟悉DI/IOC容器的概念,这些容器曾经在之前已经使用过的项目上工作过。但是,对于这个新项目,没有现有的框架,我不得不挑选一个。长期以来,有一些场景我们将为给定的接口配置几个实现。纵观网络,似乎使用任何主流框架选择性绑定到其中一个实现是非常简单的。使用IOC框架绑定到多个具体实现?

然而,我们需要运行ALL配置的实现。我在这里搜索了所有IOC标记的帖子,我试图通过主要框架的文档(到目前为止看Unity,Ninject和Windsor),但文档通常是稀疏的,我没有时间检查所有软件包的来源。

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

回答

3

的一件事是未命名的(默认)型注册将来当你调用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");