Unity解决同一接口的多个实现

时间:2015-12-03 02:51:23

标签: c# unity-container ioc-container

如另一个问题Getting unity to resolve multiple instances of the same type

中所述

我已按如下方式初始化了unity容器。

  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>()
            });

1 个答案:

答案 0 :(得分:1)

我终于找到了答案。事实证明,有一个自定义生命周期管理器,它被错误编码。 我首先创建了一个黑色控制台应用程序,并尝试了统一代码示例,它工作。这导致了原始代码库错误的结论。