私はいくつかのイベントハンドラを登録できるEventRegistryに取り組んでいます。イベントが発生するたびに、そのイベントのサブスクライバがあるかどうかがチェックされ、そのイベントが呼び出されます。実行時に汎用イベントハンドラを追加する方法
interface IEventRegistry
{
void Subscribe<TEventArgs>(Type eventType,EventHandler<TEventArgs> subscriber) where TEventArgs:EventArgs
void Publish<TEventArgs>(Type eventType,object sender,TEventArgs args) where TEventArgs:EventArgs
}
私は私の加入者を登録する必要があります。この方法では、one.Iずつが、それは私がしたいいくつかのXXXのメソッドを持っているタイプのコントローラのクラスがあるかどうreflection.For例を用いて自動化することができる仕事のようなものだと思いますそれらを自動的に購読したい:
foreach(var type in assembly.GetTypes())
{
if((typeof(Controller).IsAssginableFrom(type))
foreach(var methodInfo in type.GetMethods())
{
if(methodInfo.Name.StartsWith("On"))
// Subscribe method
}
質問は以来、私はそれが実行時に指定された型を使用して、それを呼び出すことが可能であるかのイベントハンドラを購読する一般的な方法を使用しているということでしょうか? 実際には、実行時にリフレクションによっていくつかの入力が与えられた場合、EventRegistryのSubscribeメソッドを呼び出す方法がわかりません。
"On"で始まるメソッドはどれですか? これはかなり危険な前提だと思います。反射検索に含めるすべての関数にカスタム属性を追加することをおすすめします。これはもう少しタイピングですが、もっと安全です。 –
@David:私はそれが単なる例であることを知っています – Beatles1692
の可能な複製[一般的なメソッドを呼び出すためにリフレクションを使う方法?](http://stackoverflow.com/questions/232535/how-to-use-reflection-to-call-ジェネリックメソッド) – nawfal