2017-06-25 2 views
0

J'ai une classe abstraite et une implémentation de remorquage pour cela.Comment remplacer l'unité Injection à l'exécution

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

J'utilise l'unité à la dépendance unité injection.In me inscrire docteur et en temps d'exécution que je dois utiliser enseignant, en fait remplacer que l'injection dans ma méthode test2: voici mon injection d'unité:

container.RegisterType<Person, Doctor>(); 

ici est mon constructeur de la classe:

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

Je ne suis pas très familier avec l'unité, mais vous devriez probablement les injecter avec le nom. Dans le runtime, vous pouvez spécifier exactement celui que vous voulez, et si vous voulez les deux, alors enregistrez les deux. Regardez ici: https://stackoverflow.com/questions/7046779/with-unity-how-do-i-inject-a-named-dependency-into-a-constructor – FCin

Répondre

0

Je vous suggère d'enregistrer vos deux classes dérivées: Docteur et Professeur

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

passe IUnityContainer-MyClass et détermination à l'exécution de ce que vous voulez par nom:

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 
}