Dynamic Proxyの実装

RealProxyを利用する方法はターゲットがMarshalByRefObjectのサブクラスじゃないといけない思われがちですが、インタフェース経由でアクセスすることで任意のクラスを対象にできます。*1

この簡潔な実装があったのでメモ

ただ、MethodCallMessageWrapperクラスは「このクラスは,.NET Framework インフラストラクチャをサポートします。独自に作成したコードから直接使用するためのものではありません。 」となっていたり、MethodAttributes.SpecialName のチェックなど?の部分もあるのでもう少し調べる必要ありなのですが...

いずれにせよ、今回パイプラインアーキテクチャの実装で、あまりおしゃべりじゃないオブジェクトが対象なので、動的コード生成のかわりにFactory+RealProxy+Reflectionパターンで対応できそうです。

*1:インタフェース経由でアクセスした場合、ターゲットの呼び出しがインライン展開されない