2009-08-06 8 views
0

Ich habe ein kleines Problem beim Versuch, eine Schnittstelle in Castle mit Hilfe von Reflektion zu lösen.Castle Windsor Interface-Auflösung über Reflexion

Lets sagen, ich habe eine Schnittstelle IService, und es so lösen können:

var service = wc.Resolve<IService>(); 

Dies funktioniert wie erwartet, aber ich möchte die Methode durch Reflexion nennen und kann so tun, wie folgt:

MethodInfo method = typeof(WindsorContainer).GetMethod("Resolve",new Type[] {}); 
MethodInfo generic = method.MakeGenericMethod(typeof(IService)); 
var service = generic.Invoke(wc,new object[]{}); 

Das funktioniert auch gut. Nun stellen wir uns vor, ich möchte den Typ auswählen, der durch Reflektion wiederbelebt werden soll.

Type selectedType = assembly.GetType("myProject.IService") 

Und dann versuchen, es wie folgt aufzurufen:

MethodInfo method = typeof(WindsorContainer).GetMethod("Resolve",new Type[] {}); 
MethodInfo generic = method.MakeGenericMethod(selectedType); 
var service = generic.Invoke(wc,new object[]{}); 

ich ein Schloss Fehler:

"No component for supporting the service myProject.IService was found" 

Die Art der selectedType scheint korrekt zu sein, aber es ist ein Problem, .

Weiß jemand, was ich tun kann, um die Auflösungsmethode korrekt aufzurufen?

BTW MakeGenericMethod(typeof(selectedType) wird nicht kompiliert.

Vielen Dank im Voraus

Antwort

2

Warum Makegenericmethod brauchen Sie noch? Castle has a non-generic Resolve method

Funktioniert nur container.Resolve(selectedType)?

+0

container.Resolve (selectedType) erzeugt den gleichen Fehler. Danke für den Hinweis auf die nicht generische Methode. – jheppinstall

1

Haben Sie eine Komponente für IService registriert? Das funktioniert ganz gut für mich:

+0

Danke für Ihre Antwort, ich hatte eine Komponente in einer .config-Datei registriert, die das obige Verhalten hervorbrachte. Am Ende habe ich eine Komponente mit der AddComponent-Methode hinzugefügt, die funktioniert hat, aber das Objekt etwas besiegt hat. Jetzt kann ich den String Key auflösen, habe aber eine Abhängigkeit im Code, nicht in der Config. – jheppinstall

Verwandte Themen