2

我对 DI/IOC 容器的概念相对熟悉,我曾在之前已经使用它们的项目上工作过。然而,对于这个新项目,没有现有的框架,我不得不选择一个。

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

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

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

4

2 回答 2

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");
于 2008-11-25T04:03:11.310 回答
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/

于 2008-11-25T00:56:32.170 回答