Unity ResolveAll 不工作

Unity ResolveAll not working

我是第一次使用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);
        }

缺少什么?

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

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> 将 return 该类型的所有命名映射,但不是默认的未命名映射(如果您注册了一个)。

有关详细信息,另请参阅 Registering Types and Type Mappings