Controlのイベントに動的に処理をアタッチする その2

Clickイベントだとこれで問題無し。しかし、当然ながらイベントの型がEventHandler以外だと例外が発生する。イベントの型はEventInfo::EventTypeで取れるので、この情報を使ってイベントハンドラ自体も生成しないと駄目。

DynamicMethodを使ってEventTypeに沿ったデリゲートが生成できる所までは解ったのだが、ここで問題発生。先日のコードで言うと

delegate(object sender, EventArgs e)
{
    action.Run();
}

この部分を動的に生成したデリゲートに挿入しなければならない訳だ。DynamicMethodは、ILGeneratorを内部で使用できるので、外部メソッドをコールするILを出力することはできそうだが、そもそもイベントパブリッシャ(この場合はControl)とは全く関係の無いオブジェクト(ここではIAction)のメソッドを挿入する方法が解らない。Dynamicmethodはそもそもstaticメソッドが対象だし、一筋縄ではいかないぽい。