我们对需要保存到某个审核日志数据库的一组事件使用空标记接口。
但是,在使用者中,消息被转换为此接口,因此我们得到一个空对象。
我们真正需要的是获取“动态”或获取消息正文,以便我们可以“按原样”将其发送到审计数据库,因为我们的数据库可以保存JSON文档。但我们无法看到如何从上下文中将消息体作为JSON。它有可能吗?
答案 0 :(得分:7)
如果你真的想要高效,你可以让你的消费者使用今天的界面,但是在消费者中,从消息上下文中获取JToken,并使用JToken保存消息的JSON 。这样,您的使用者不需要知道每个对象类型,也不需要具有该对象类型的程序集。
public async Task Consume(ConsumeContext<IEvent> context)
{
ConsumeContext<JToken> jsonContext;
if(context.TryGetMessage(out jsonContext))
{
_eventStore.Save(jsonContext.Message); // the JToken
}
}