您好我需要在Unity中为同一个界面注册两个类型。
这是我想要做的一个例子:
container.RegisterType(typeof(IPerson) , typeof(Administrator))
container.RegisterType(typeof(IPerson) , typeof(Director))
public class School{
private IPerson _director;
public School(IPerson director){
_director = director;
}
}
public class Building{
private IPerson _administrator;
public Building(IPerson administrator){
_administrator= administrator;
}
}
我如何告诉Unity,对于Class School我想要一个Director实例,对于类我是否需要一个Administrator实例?
答案 0 :(得分:3)
imho容器不是工厂。它通常用于解析服务。如果一个类依赖于特定的实现,那么它实际上并不依赖于接口。因此你的架构存在缺陷,需要加以纠正。
最常见的方法是在您的班级中使用工厂:
public class School{
private IPerson _director;
public School(IPersonFactory factory){
_director = factory.CreateDirector();
}
}
public class Building{
private IPerson _administrator;
public Building(IPersonFactory factory){
_administrator = factory.CreateAdministrator();
}
}
但这对于不同的学校/建筑物的导演和管理员来说是不同的。因此我会使用:
public class School{
private IPerson _director;
public School(IStaffRepository staffing){
_director = staffing.GetDirector(_schoolName);
}
}
不要将IoC容器用于您的业务实体。使用它们来解析用于维护/使用实体的类(服务)。