私は単純なイベント ディスパッチャーを作成しています。このイベントは、clr 型名を持つオブジェクトと、元のイベントを表す json オブジェクト (byte[] が処理されて jobject に処理された後) が発生します。誰かが詳細を知りたい場合は、GetEventStore を使用しています。
そのclrタイプを使用して2つのことをしたい:
- IHandles を実装するクラスを見つけて、
- そのクラスで Consume(clr type) を呼び出します
次のコードを使用して、パート1を正常に機能させることができました。
var processedEvent = ProcessRawEvent(@event);
var t = Type.GetType(processedEvent.EventClrTypeName);
var type = typeof(IHandlesEvent<>).MakeGenericType(t);
var allHandlers = container.ResolveAll(type);
foreach (var allHandler in allHandlers)
{
var method = allHandler.GetType().GetMethod("Consume", new[] { t });
method.Invoke(allHandler, new[] { processedEvent.Data });
}
ATM 問題は、processedEvent.Data が JObject であることです。その上で t を定義していないため、processedEvent.Data のタイプを知っています。
型名の厄介な切り替えを行わずに、その JObject を型 t に解析するにはどうすればよいですか?