我有一个项目即将推出,该项目将涉及通过相同的接口连接到一对多的后端系统;我们称它为 IBacksideProvider。
我想使用 Unity 在运行时注入这些提供程序。问题是因为我们谈论的是 1...n 个后端系统,所以我需要注册 1...n 个 IBacksideProvider 的实现。Unity 不支持开箱即用。
然而,这篇博文表明这是可以做到的。我想知道是否有人这样做过或知道如何使用 Unity 以便能够做到这一点。TIA。
我有一个项目即将推出,该项目将涉及通过相同的接口连接到一对多的后端系统;我们称它为 IBacksideProvider。
我想使用 Unity 在运行时注入这些提供程序。问题是因为我们谈论的是 1...n 个后端系统,所以我需要注册 1...n 个 IBacksideProvider 的实现。Unity 不支持开箱即用。
然而,这篇博文表明这是可以做到的。我想知道是否有人这样做过或知道如何使用 Unity 以便能够做到这一点。TIA。
为什么这不起作用? http://msdn.microsoft.com/en-us/library/cc440943.aspx
要根据命名注册从容器中检索对象实例列表,请使用 ResolveAll 方法并为对象类型(注册类型)指定一个值。ResolveAll 方法返回非默认(命名)注册类型的 IEnumerable 泛型列表,您可以在代码中遍历这些类型以检查每个对象。
IEnumerable<IMyObject> objects = myContainer.ResolveAll<IMyObject>();
Unity 从 2008 年 11 月左右发布的 1.2 版开始支持数组注入。这是您目前可以做的最好的事情,而无需将统一容器注入到您的对象中。
LinFu.IOC支持构造函数、属性、方法甚至字段的 IEnumerable<T> 和 IList<T> 注入,开箱即用。AFAIK,它是该博客上为数不多的真正支持列表注入的容器之一。