Überschreibende Methode in der DLL mit der spiegelung

Ich bin nicht einmal sicher, ob dies möglich ist, also entschuldigt, wenn nicht. Ich habe Recht ausführlich gegoogelt und nicht das gefunden was ich Suche.

Im Grunde haben wir eine Anwendung, die von einem Dritten produziert, die, um vollkommen stumpf ist Quatsch. Wir haben ein bestimmtes Problem und es geschafft haben, zu verfolgen, das problem mit ILSpy zu einer Methode in einer DLL. Natürlich haben wir keine (noch nicht in der Lage sind zu bekommen) den Quellcode und das Unternehmen in Frage, die nicht Willens ist, das problem zu beheben, in jeder angemessenen Zeitrahmen.

So, haben wir untersucht verschiedene Wege der Untersuchung und kommen mit nichts. Ich habe auf der Suche zu sehen, ob dies getan werden kann, unter Verwendung von reflektion und das ist so ziemlich die Letzte Hoffnung, die wir haben, um diese zu arbeiten. In einer nussschale, was ich tun möchte ist Folgendes:

  • Erstellen eine einfache Klasse Bibliothek mit dem gleichen Namen wie die vorhandenen DLL -
  • Reflektion verwenden, um importieren Sie die Methoden aus der vorhandenen DLL -
  • Irgendwie überschreiben Sie die Methode in Frage, mit meinem eigenen, richtigen code
  • Wiederaufbau der code, also habe ich eine neue DLL, mit 99% der Funktionalität des bestehenden DLL aber mit meinem override-code mit der richtigen Funktionalität.

Ich gefunden habe, während meiner Untersuchungen TypeBuilder.DefineMethodOverride und auch eine Seite von StackOverflow, das scheint ähnlich, aber nicht ganz das, was ich Suche.

http://msdn.microsoft.com/en-us/library/system.reflection.emit.typebuilder.definemethodoverride.aspx

Gibt es eine Möglichkeit, zu "überschreiben", eine Methode, mit der Reflexion?

Jede Beratung geschätzt!

Andrew

Bearbeiten

Die andere mögliche Idee, die ich hat war, produzieren eine partielle Klasse mit dem override-Funktion, aber das schien nicht machbar entweder.

  • Frage mich, ob eine interceptor-basierten Ansatz würde die Arbeit hier - so etwas wie Schloss DynamicProxy: castleproject.org/projects/dynamicproxy - natürlich wäre Sie nicht vollständig ersetzen, die Methode aufrufen, aber das könnte man sicherlich abfangen/Fehler behandeln und optimieren (ach ja, und es hängt davon ab, ob die Klasse über virtuelle Methoden)
  • Warum nicht einfach eine Klasse, als Sie sagte, dass die Anrufe der Dritten Klasse für die meisten Dinge, außer die Methode, die Sie überschreiben möchten? Oder leiten Sie von dieser Klasse und verwenden Sie einen anderen Namen für diese Methode? Auch brauchen Sie wirklich, dass in 1 einzigartige dll? Warum nicht aufteilen in 2?
InformationsquelleAutor Andrew | 2013-06-18
Schreibe einen Kommentar