Unity ResolveAll无法正常工作

时间:2015-03-05 11:39:43

标签: c# dependency-injection inversion-of-control unity-container

我第一次使用Unity。我试图在代码中添加一些依赖项,但它们没有得到解决。代码如下:

    public interface IClassA
    {
        void Show();
        void ShowCount();
        int ID { get; set; }
    }

    class ClassA  : IClassA
    {
        public int count = 0;

        public void Show()
        {
            Console.WriteLine(this.ToString());
        }

        public void ShowCount()
        {
            Console.WriteLine(count++);
        }

        public int ID { get; set; }
    }

以下代码使用的是Unity:

        IUnityContainer container = new UnityContainer();

        InjectionMember[] members1 = {new InjectionProperty("ID", 10)};
        InjectionMember[] members2 = {new InjectionProperty("ID", 20)};

        container.RegisterType(typeof(IClassA), typeof(ClassA), members1);
        container.RegisterType(typeof(IClassA), typeof(ClassA), members2);

        foreach(var x in container.ResolveAll<IClassA>())
        {
            Console.WriteLine(x.ID);
        }

缺少什么?

1 个答案:

答案 0 :(得分:2)

如果要为类型注册不同的映射,则需要使用命名映射。目前,您只有一个默认的未命名映射,您可以使用此调用覆盖

container.RegisterType(typeof(IClassA), typeof(ClassA), members1);
container.RegisterType(typeof(IClassA), typeof(ClassA), members2);

要解决此问题,您需要为映射命名

container.RegisterType(typeof(IClassA), typeof(ClassA), "Mapping1", members1);
container.RegisterType(typeof(IClassA), typeof(ClassA), "Mapping2", members2);

然后,调用ResolveAll<IClassA>将返回该类型的所有命名映射,但不返回默认的未命名映射(如果您注册了一个)。

有关详情,请参阅Registering Types and Type Mappings