使用IOC框架绑定到多个具体实现?

时间:2008-11-25 00:20:09

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

我对DI / IOC容器的概念比较熟悉,这些容器曾经用于以前已经使用过的项目。但是,对于这个新项目,没有现有的框架,我不得不选择一个。

简而言之,在某些情况下,我们将为给定的接口配置多个实现。浏览网页,似乎使用任何主流框架有选择地绑定到其中一个实现非常简单。

但是有些情况下我们需要运行 ALL 配置的实现。我在这里搜索了所有IOC标记的帖子,我正在尝试通过主要框架的文档(到目前为止看Unity,Ninject和Windsor),但是文档通常很少,我没有时间去检查所有包裹的来源。

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

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

所以我不知何故错过了我的第一遍以某种方式透过Unity看...但我会回答我自己的问题。

Unity正是我想要的。 http://msdn.microsoft.com/en-us/library/cc440943.aspx

此外,对于像我这样进行IOC狩猎和跳舞的其他人来说,这个链接被证明是非常宝贵的。 http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/