2017-06-25 45 views
0

我有一个抽象类,并为它执行两个实现。如何在运行时取代统一注入

public abstract class Person{ 
    public abstract string GetName(); 
} 

public class Doctor : Person{ 
    public override string GetName() 
    { 
     return "Doctor"; 
    } 
} 

public class Teacher : Person{ 
    public override string GetName() 
    { 
     return "teacher"; 
    } 
} 

我使用统一进行依赖injection.In统一注册我的医生和在运行时我需要用的老师,居然在我的test2的方法取代注射: 这里是我的统一注射:

container.RegisterType<Person, Doctor>(); 

这里是我的类的构造函数:

private readonly Iperson _person; 
pubice myclass(Iperson person) 
{ 
    _person=person 
} 

public voide test1() 
{ 
    var Name=_person.GetName(); 
    // Name is : Doctor 
} 

public void test2() 
{ 
    //???? 
    var Name=_person.GetName(); 
    // Name must be teacher 
} 
+0

我不是很熟悉的团结,但是你应该有名字将它们注入。在运行时,你可以指定你想要的哪一个,如果你想要两个,那么注册两个。看看这里:https://stackoverflow.com/questions/7046779/with-unity-how-do-i-inject-a-named-dependency-into-a-constructor – FCin

回答

0

我建议你到这两个派生类的注册:医生和教师

container.RegisterType<Person, Doctor>(nameof(Doctor)); 
container.RegisterType<Person, Teacher>(nameof(Teacher)); 

通行证IUnityContainerMyClass并在运行时解决你想要什么名字:

private readonly IUnityContainer _container; 

public MyClass(IUnityContainer container) 
{ 
    _container = container 
} 

public void test1() 
{ 
    var name = container.Resolve<Person>(nameof(Doctor)).GetName(); 
    // Name is : Doctor 
} 

public void test2() 
{ 
    var name = container.Resolve<Person>(nameof(Teacher)).GetName(); 
    // Name is : Teacher 
} 
相关问题