我正在编写一个简单的事件分发器,其中我的事件以对象形式出现,包括clr类型名称和表示原始事件的json对象(在将byte[]处理为jobject之后触发)。如果有人想知道具体细节,我正在使用GetEventStore。
我想要利用这个clr类型做两件事:
1.查找实现IHandles接口的类;
2.调用该类上的Consume(clr type)方法。
我已经成功地使用以下代码完成了第一部分:
我想要利用这个clr类型做两件事:
1.查找实现IHandles接口的类;
2.调用该类上的Consume(clr type)方法。
我已经成功地使用以下代码完成了第一部分:
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 });
}
问题在于 processedEvent.Data 是一个 JObject 类型 - 我知道它的类型是因为我在它上面定义了 t。
如何将 JObject 解析为类型 t 而又不进行任何不必要的类型名称判断?
DeserializeObject
吗? - cynic