2017-01-19 2 views
1

Ich teste Windsor.Castle für die Auflösung meiner generischen Komponenten.Registrieren generischer Komponenten in Windsor.Castle: Unterschied im Verhalten zwischen Type.GetType und typeof

ich meine Container mit Zeilen wie die folgende Konfiguration:

container.Register(Component.For(typeof(ICommand<,>)).ImplementedBy(Type.GetType("WCExp.Test.GetAllCommand`2")).Named("GetAllCommand")); 
container.Register(Component.For(typeof(ICommand<,>)).ImplementedBy(typeof(WindsorCastleExperiments.Implementations.GetAllCommand<,>)).Named("GetAllCommandOriginal")); 

Wie Sie ImplementedBy ein Typ vorgesehen ist, sehen können, entweder durch Type.GetType() oder durch typeof().

Jetzt, während ich testete, bemerkte ich, dass manchmal der registrierte Dienst nicht die implementierende Klasse war, sondern die Schnittstelle.

Fehlermeldung: Fehler beim Erstellen der Instanz ICommand ... ist abstrakt. (keine vollständige Zeichenfolge)

Ist es möglich, dass bei der Verwendung von Type.GetType() manchmal eine Schnittstelle für eine gegebene Zeichenfolge zurückgegeben werden kann, auch wenn die angegebene Zeichenfolge die Klassentypdefinition ist?

So kann

Type.GetType("WCExp.Test.GetAllCommand`2") 

Rückkehr der Schnittstelle ICommand <,> ...?

Dies geschah für die Klassen, die sich in einer abhängigen Baugruppe befanden. Für die Klassen in derselben Assembly wie ich dieses Problem wurde die Konfiguration nicht selbst präsentieren hat

Voll Quellen (noch?): https://github.com/schwarzie2478/WindsorCastleExperiments

Antwort

2

löste ich mein Problem. Am Ende hatte es nichts mit Schloss zu tun. (Aber Castle ermöglicht das):)

Type.GetType erwartet eine Typzeichenfolge, die den assemblyName für Typen enthält, die außerhalb der aktuell ausgeführten Assembly vorhanden sind.

Aber weil ich nie überprüft habe, was diese Funktion zurückgegeben hat, wusste ich nicht, dass die Registrierung gegen einen Nullwert vorging, der Castle erlaubt, aber dann wird die Schnittstelle als Dienst anstelle einer Implementierung wie erwartet registriert ...

Verwandte Themen