new Form1() を乗っ取る
というわけで、上記のトピックを読めばやることはもうわかってしまうと思いますが、話を単純にすると、やるべきことは new の乗っ取りです。
乗っ取られるクラスは ContextBoundObject の派生クラスであるほかに、ProxyAttribute の派生クラスを属性として保持する必要があり、new に対して proxy を生成する必要がありました。
まずは、ProxyAttribute の派生クラスですが、CreateInstance() というわかりやすそうなメソッドを override することができるようになっています。
public class Form1ProxyAttribute : ProxyAttribute { public override MarshalByRefObject CreateInstance(Type serverType) { return MethodLogger.Attach( base.CreateInstance(serverType) ); } }
もう、何も考える必要はないですよね?*1
このカスタム属性を Form1 クラスに付与することで、new Form1 を乗っ取ることに成功し、this を含めたすべてのメソッド呼び出しの記録が……。
*1:ドキュメントを読むと考えたくなるような記述はいっぱいありますが…