2016-12-06 2 views
2

Ich habe MyServiceLibrary.dll, die wenige Klassen wie UserStorageService, Storage, User darstellt. Der Dienst enthält einen Speicher und speichert Benutzer im Speicher.Der Aufruf einer Instanzmethode mithilfe der Reflektion löst TargetException aus.

Ich habe eine neue Konsolenanwendung mit neuer Anwendungsdomäne darin erstellt.

AppDomain masterDomain = AppDomain.CreateDomain("servicedomain"); 
string serviceLibraryPath = @"G:\Git\Service"; 
Assembly serviceAssembly = Assembly.LoadFrom(serviceLibraryPath); 

Hier bekomme ich alle Typen, die ich verwende.

Type userType = serviceAssembly.GetType("MyServiceLibrary.User"); 
Type storageType = serviceAssembly.GetType("MyServiceLibrary.UserStorage"); 
Type userStorageServiceType = serviceAssembly.GetType("MyServiceLibrary.UserStorageService"); 

Neue Instanzen dieser Typen wurden in MasterDomain erstellt.

Alle meine Typen, die ich verwendete, wurden von MarshalByRefObject Klasse geerbt. Jetzt möchte ich meinen neuen Benutzer hinzufügen.

MethodInfo addMethod = userStorageServiceType.GetMethod("Add"); 
addMethod.Invoke(userStorageService, new object[] { user }); 

Ich habe eine Ausnahme:

TargetException: Das Objekt entspricht nicht den Zieltyp.

Im Logfile sah ich, dass die Instanz von UserStorageService erstellt wurde. Ich kann eine statische Methode dieser Klasse aufrufen, aber Instanzmethoden funktionieren nicht.

Antwort

0

Haben Sie GetType verwendet, um sicherzugehen, dass Sie den genauen Typ angegeben haben?

userStorageService.GetType().GetMethod("Add") 
Verwandte Themen