Dynamisches Abfangen von Aufrufen in .NET

7

Ich bin gespannt, ob .NET irgendeine Form des dynamischen Abfangens von Methodenaufrufen (oder Eigenschaftenaufrufen) zur Laufzeit unterstützt. Das heißt, können Sie einen Aufruf an ein Objekt ohne statische Kompilierungsinformationen wie eine Schnittstelle abfangen (in Anlehnung an den Link CORBA DII ()) Text ) oder IDispatch von COM).

Wenn nicht, würde die neue Funktion "Dynamisch typisierte Objekte" in C # 4.0 in dieser Hinsicht hilfreich sein.

    
karmasponge 26.08.2009, 01:05
quelle

3 Antworten

16

Es gibt keine integrierte Funktion, mit der Sie ein Objekt abfangen können, für das Sie die Instanziierung nicht steuern können. Auch dafür wird es in der kommenden .net 4.0 keine neuen Möglichkeiten geben.

Wenn Sie Instantiierung steuern können:

  1. Wenn Ihr Objekt MarshalByRef sein kann, können Sie RealProxy verwenden.
  2. Sie können einige IOC-Container verwenden, z. LinFu , Castle Dynamic Proxy
  3. Sie könnten ein Tool wie PostSharp , Mono Cecil oder Microsoft CCI , um Ihre neu zu schreiben Assemblys mit den Interceptions als Post-Compile-Schritt.

Wenn Sie die Instanziierung nicht steuern können

  1. Sie können ICorDebug - die .Net-Debugging-APIs verwenden, die wirklich funktionieren schwer zu bedienen und schwer.
  2. Sie können ICorProfiler verwenden. Dort finden Sie auch die .Net-Profiling-APIs ziemlich kompliziert zu bedienen.

Alternativ könntest du dir eine dynamische Sprache wie IronRuby ansehen, die eine eingebaute alias_method und define_method goodness hat (was es dir erlaubt, alles neu zu definieren), also Interception eingebacken.

.NET 4.5 führt eine Methode zum ReJIT Methoden, die einen weiteren Hook für das Abfangen von Methoden bereitstellen (vorausgesetzt, Sie führen keinen parallelen / bg-GC aus und die Methode ist nicht inline)

    
Sam Saffron 26.08.2009, 01:13
quelle
1

Sehen Sie sich die .net 4.0 dynamischen Objekte an ... Das kann es.

Ссылка

    
user231300 25.01.2010 13:12
quelle

Tags und Links