Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity为具有相同接口的不同类获取不同类型_C#_Unity Container - Fatal编程技术网

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

C# Unity为具有相同接口的不同类获取不同类型,c#,unity-container,C#,Unity Container,嗨,我需要在Unity中为同一接口注册两种类型 下面是我正在尝试做的一个例子: container.RegisterType(typeof(IPerson) , typeof(Administrator)) container.RegisterType(typeof(IPerson) , typeof(Director)) public class School{ private IPerson _director; public School(IPerson director

嗨,我需要在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,对于班级学校,我需要一个Director实例,对于班级建设,我需要一个Administrator实例?

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

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

这只是我试图实现的一个示例,我使用的不是我的实际代码。我知道这可以通过Unity来完成。我以前见过Unity,但我不知道我必须使用什么样的RegisterType重载。这是一个脆弱的解决方案,但是可以使用命名的依赖项来完成。不过我还是会避免的。这只是我试图实现的一个例子,不是我实际使用的代码。我知道这可以通过Unity来实现。我以前见过Unity,但我不知道我必须使用什么样的RegisterType重载。这是一个脆弱的解决方案,但可以通过命名依赖项来实现。不过我会避免的。