0

嗨,我需要在 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 对于班级 School 我想要一个 Director 实例而对于班级 Building 我想要一个 Administrator 实例?

4

1 回答 1

3

恕我直言,容器不是工厂。它通常用于解析服务。如果一个类依赖于特定的实现,那么它并不真正依赖于接口。因此您的架构存在缺陷,需要纠正。

最常见的方法是在您的类中使用工厂:

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

于 2013-09-04T18:58:19.653 回答