Controlのイベントに動的に処理をアタッチする その2
Clickイベントだとこれで問題無し。しかし、当然ながらイベントの型がEventHandler以外だと例外が発生する。イベントの型はEventInfo::EventTypeで取れるので、この情報を使ってイベントハンドラ自体も生成しないと駄目。
DynamicMethodを使ってEventTypeに沿ったデリゲートが生成できる所までは解ったのだが、ここで問題発生。先日のコードで言うと
delegate(object sender, EventArgs e) { action.Run(); }
この部分を動的に生成したデリゲートに挿入しなければならない訳だ。DynamicMethodは、ILGeneratorを内部で使用できるので、外部メソッドをコールするILを出力することはできそうだが、そもそもイベントパブリッシャ(この場合はControl)とは全く関係の無いオブジェクト(ここではIAction)のメソッドを挿入する方法が解らない。Dynamicmethodはそもそもstaticメソッドが対象だし、一筋縄ではいかないぽい。