我第一次使用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);
}
缺少什么?
答案 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>
将返回该类型的所有命名映射,但不返回默认的未命名映射(如果您注册了一个)。