aleczandru
aleczandru

Reputation: 5449

Unity getting different types for different class with same interface

Hi I am in need to Register two Types for the same interface in Unity.

Here is an example of what I am trying to do:

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;
    }
}

How would I go about in telling Unity that for class School I want an Director instance and for class Building I want an Administrator instance?

Upvotes: 0

Views: 237

Answers (1)

jgauffin
jgauffin

Reputation: 101150

imho the container is not a factory. It's typically used to resolve services. And if a class is dependent of a specific implementation it's not really dependent on the interface. hence your architecture is flawed and need to be corrected.

The most common approach is to use a factory in your class instead:

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();
    }
}

But that is imho useless as directors and administrators are different for different schools/buildings. As such I would use:

public class School{
    private IPerson _director;
    public School(IStaffRepository staffing){
       _director = staffing.GetDirector(_schoolName);
    }
}

Don't use IoC containers for your business entities. Use them to resolve classes (services) which is used to maintain/work with your entities.

Upvotes: 3

Related Questions