如何在运行时替换统一注入
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
}
我有一个摘要 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
}