C# 团结解决了一切不起作用的问题

C# 团结解决了一切不起作用的问题,c#,dependency-injection,inversion-of-control,unity-container,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

我第一次使用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);
        }
IUnityContainer container=newunitycontainer();
InjectionMember[]members1={newinjectionproperty(“ID”,10)};
InjectionMember[]members2={newinjectionproperty(“ID”,20)};
容器注册类型(类型(IClassA)、类型(ClassA)、成员1);
容器注册类型(类型(IClassA)、类型(ClassA)、成员2);
foreach(container.ResolveAll()中的变量x)
{
控制台写入线(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
将返回该类型的所有命名映射,但不会返回默认的未命名映射(如果已注册)

有关更多信息,请参见