2016-04-25 17 views
2

Ich versuche, die folgendes zu tun:Unity Registertypen mit Reflection

foreach (var item in Assembly.GetExecutingAssembly() 
          .GetTypes() 
          .Where(i => i.GetInterfaces() 
          .Contains(typeof(ITabItem)))) 
{ 
    container.RegisterType<ITabItem, item>(nameof(item)); 
} 

Aber ich immer diese Fehlermeldung auf item im RegisterType Methode:

Fehler CS0118 'item' ist eine Variable, aber wird wie ein Typ verwendet

Ich weiß, dass ich einen Objekttyp übergeben, aber wie komme ich um diese?

EDIT: dies ist die nicht-dynamische Art und Weise, die funktioniert.

container.RegisterType<ITabItem, AdminViewModel>(nameof(AdminViewModel)); 
container.RegisterType<ITabItem, OwnerViewModel>(nameof(OwnerViewModel)); 
+0

Ich glaube, die Frage in der allgemeinen tiefer in Generika und Reflexion geht aber meine Frage befasst sich eine Einheit spezifische Methode und die Antwort für meine Frage spezifisch konnte nicht in dieser Frage gefunden werden. Die Antwort unten tut es dagegen. Ich glaube also nicht, dass meine Frage ein Duplikat ist. Das Markieren dieser Frage als Duplikat könnte dazu führen, dass die Leute von der eigentlichen Antwort wegkommen ... – grmbl

+0

stimme zu. wiedereröffnet. – vcsjones

Antwort

2

Sie müssen die nicht-generische RegisterType, verwenden, die wahrscheinlich so etwas wie folgt aussieht:

container.RegisterType(typeof(ITabItem), item, item.FullName);