Unity为具有相同接口的不同类获取不同类型

本文关键字:同类 获取 同类型 接口 Unity | 更新日期: 2023-09-27 18:30:14

Hi我需要在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实例,而对于class Building,我需要一个Administrator实例?

Unity为具有相同接口的不同类获取不同类型

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容器用于您的业务实体。使用它们来解析用于维护/使用实体的类(服务)。