如何在运行时替换unity注入

时间:2017-06-25 06:57:40

标签: .net unity-container code-injection abstract

我有一个抽象类和两个实现。

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 
}

1 个答案:

答案 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
}