2009-08-26 5 views
7

.NETが実行時にメソッド呼び出し(またはプロパティ呼び出し)の任意の形式の動的傍受をサポートしているかどうか不思議です。つまり、インターフェイス(CORBA DII(link text)またはCOMのIDispatchの行に沿って)などの静的なコンパイル情報を持たないオブジェクトへの呼び出しをインターセプトできますか?.NETでの呼び出しの動的傍受

もしそうでなければ、C#4.0の新しい「動的型付きオブジェクト」機能はこの点で役立ちますか?

+0

:http://stackoverflow.com/questions/25803/how-do-i-intercept-a-method-call-in-c –

+0

それは強く関連していますか?私は属性を追加するクラスはありません。 – karmasponge

+0

私は現在、 'RealProxy'と 'Profile Injection Application Block'について調査中です。 – karmasponge

答えて

16

インスタンス化を制御できないオブジェクトをインターセプトできる組み込み関数はありません。同様に、今後の.net 4.0にはこれのための新しい機能はありません。

あなたはインスタンス化を制御することができた場合:あなたのオブジェクトをすることができ

  1. 場合MarshalByRefあなたがRealProxyを使用することができます。
  2. かなりのIOCコンテナを使用できます。 LinFuCastle Dynamic Proxy
  3. あなたはポストコンパイルステップとしてインターセプトを使用してアセンブリを書き換えることPostSharpMono CecilまたはMicrosoft CCIのようなツールを使用することができます。

あなたがICorDebugを使用することができますインスタンス化

  1. を制御することができない場合 - 実際に使用するのは難しいと重いです。ネットのデバッグAPIを。
  2. ICorProfiler - .NetプロファイリングAPIも使用することができます。

また、あなたは(あなたが何かを再定義することができます)alias_methodを内蔵し、define_method良さを持っているIronRubyのような動的言語、で見ることができるので、傍受が焼き。


。 NET 4.5では、メソッドの傍受のための別のフックを提供するメソッドをReJITに導入しています(同時/ bg GCを実行しておらず、メソッドがインライン化されていない場合)。

+0

また、インターフェイスを経由している場合はRealProxyを使用できます。 – kyoryu

+0

私は「Castle Dynamic Proxy」が私が探しているものに最も適していると思う。 APIは素敵でシンプルです。 – karmasponge

+1

良いもの。追加するべきことの一つ - Mono.CecilはPostSharpといくつかのオーバーラップを持っています。 –

関連する問題