2017-06-25 3 views
0

私は抽象クラスとトウ実装を1つ持っています。私は実際に私のTEST2方法でその注入を置き換える、私は医者を登録し、実行時に、私は教師を使用する必要がinjection.Inの団結を依存性結束を使用していますランタイムでユニティインジェクションを置き換える方法

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"; 
    } 
} 

:ここ は私の団結注入です:

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-ject-a-named-dependency-into-a-constructor – FCin

答えて

0

私はあなたがあなたの派生クラスの両方を登録することをお勧め:医師と教師

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

MyClassからIUnityContainerと名前で欲しいものランタイムで解決:

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 
} 
関連する問題