Reputation: 5449
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
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