我有一个抽象类和两个实现。
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";
}
}
我正在使用unity来依赖注入。在团结中我注册Doctor并且在运行时我需要使用老师,实际上在我的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 :(得分:0)
我建议您注册两个派生类:医生和教师
container.RegisterType<Person, Doctor>(nameof(Doctor));
container.RegisterType<Person, Teacher>(nameof(Teacher));
将IUnityContainer
传递给MyClass
并在运行时解决您想要的名称:
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
}