在MassTransit使用者中获取动态对象

Ale*_*rev 2 masstransit

我们对需要保存到某个审计日志数据库的一组事件使用空标记接口.

但是,在使用者中,消息被强制转换为此接口,因此我们得到一个空对象.

我们实际需要的是获取"动态"或获取消息体,以便我们可以"按原样"将其发送到审计数据库,因为我们的数据库可以保存JSON文档.但我们无法看到如何从上下文中将消息体作为JSON.有可能吗?

Chr*_*son 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
    }
}
Run Code Online (Sandbox Code Playgroud)