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