如何在运行时替换统一注入

How to replace unity Injection on runtime

我有一个摘要 Class 和两个实现。

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 to dependency injection.In unity 我注册了 Doctor 并且在 运行 我需要使用 teacher 的时候,实际上在我的 test2 方法中替换了那个注入: 这是我的统一注入:

container.RegisterType<Person, Doctor>();

这是我的 class 构造函数:

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 
}

我建议你注册你的两个派生 类: Doctor 和 Teacher

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
}