DispatchProxy主に技術日記twitterで書ききれない内容をつらつらと書こうと思います。いう型が追加されています。近いといえばわかる人もいるでしょうか)。使用して特定のインターフェイスのプロキシを作成すると、返されたオブジェクトに対するメソッド呼び出しに対する割り込みがかけられるようになります。この説明でピンと来る人はいないでしょうから、もう少し丁寧に説明していきます。使い方まず、割り込み処理を実行するプロキシクラスを作ります。抽象クラスを継承したクラスです。クラスには、以下のような抽象メソッドが定義されています。args);どう見ても、メソッド呼び出しに割り込んで、処理を実装しろと言っていますね。OK)などをすればOKです。後は、やりたいことに応じて、このプロキシにプロパティやメソッドを生やしてください。このプロキシ型はpublicでなければならず、さらにpublicなデフォルトコンストラクターが必要です(後述しますが、つらい)。静的メソッドで、プロキシ型のインスタンスを作成します。このとき、任意のインターフェイス型と、先ほど作成したプロキシ型を指定します。MyAopProxy>();この戻り値のobjのメンバーを呼び出すと、MyAopProxyのInvoke(MethodInfo,object[])が呼び出されます。例さっそく例を見てみましょう。昔から、AOPと言えばトランザクション管理とログ出力と相場が決まっています。プロキシクラスを以下のように記述します。追加のプロパティはAPからは呼んでほしくないので、internalにしてます。実際の処理を行うオブジェクト。コンストラクターが引数を宣言できないので、初期化メソッドを用意。実装されていないので、頑張って比較。メソッドかどうかは問わない。}}で、以下のようなラッパーメソッドを作ってあげればOKです。派生クラスでもあるということです。コンパイラーをごまかすために、いったんobjectにキャストしています。理由は本筋ではないので割愛します)。いうと以下のような処理をやってくれます(他にも細かいことをいろいろやっていますので、興味のある方はソースを見るといいでしょう)。クラスを継承したプロキシクラスを動的に生成します。動的に生成したクラスに、指定したインターフェイス(T型)を実装させます。動的に生成したクラスに、インターフェイスが宣言しているすべてのメソッドを宣言します。現在のメソッド情報をMethodInfoとして取得するILを出力します。実引数を格納するobject[]をインスタンス化するILを出力します。実引数をobject[]につめるILを出力します。object[])を呼び出すILを出力します。object[])の戻り値をキャストして戻します。注意点プロキシ型はpublicである必要があります。仕組みと同様に、インスタンスメソッドだけに割り込めます。object[])の実装によりますが、上記の例のように素直に実装してしまうと、呼び出し先で発生した例外がTargetInvocationExceptionになったりして透過的な割り込みではなくなります。式木か何かでMethodInfo.Invokeせずに呼び出すとか。返されたオブジェクトに対してリフレクションを実行した場合、なぜかインターフェイスが実装しているはずのプロパティとイベントの情報が取れません。"A";というコードは(もちろん)コンパイルするし動作するにもかかわらず、foo.GetType().GetRuntimeProperty("Bar")はnullを返します。このオブジェクトをリフレクションベースのツールやライブラリに渡すと、うまく動作しないかもしれません。自己紹介yfakariya技術屋の端くれです。