【发布时间】:2026-02-02 06:20:03
【问题描述】:
正如另一个问题Getting unity to resolve multiple instances of the same type中给出的那样
我已经按如下方式初始化了统一容器。
static void Main(string[] args)
{
var container = new UnityContainer();
container.RegisterType<IFoo, Foo1>("aaa");
container.RegisterType<IFoo, Foo2>("bbb");
// container.Resolve<IEnumerable<IFoo>>(); returns 0
// container.ResolveAll<IFoo>(); returns 0
Console.WriteLine(foos.Count());
Console.ReadLine();
}
当unity初始化下面的类时,它会发送一个包含两个元素的数组。但是这两个元素来自同一个类 Foo1。我不想重复。我需要注入 IFoo 的所有不同实现。
public class Test
{
IFoo[] _fooSet;
public Test(IFoo[] allRegisteredInterfaces)
{
_fooSet = allRegisteredInterfaces;
}
}
例如解决方案 Injecting arrays with Unity 不起作用,因为它在注入的数组中创建了重复项。
如何做到这一点?另请注意,我不想注册实例实现。我可以通过注册每个 IFoo 实现实例的数组来轻松做到这一点。例如,以下解决方案无效,因为它注册的是实例而不是类型。
container.RegisterInstance<IFoo[]>(new IFood[] {
container.Resolve<Foo1>(),
container.Resolve<Foo2>()
});
【问题讨论】:
-
我无法重现您描述的问题。见here。我看到两个实例已解决,每个已注册类型一个。
-
我所做的是创建了一个黑色的控制台应用程序并尝试过,它就像你提到的那样工作。这导致我对代码库进行了更多调查,并发现了错误的生命周期管理器。
标签: c# unity-container ioc-container