C# Masstransit InboundMessageInterceptor与使用者处于不同的生命周期范围

C# Masstransit InboundMessageInterceptor与使用者处于不同的生命周期范围,c#,autofac,masstransit,C#,Autofac,Masstransit,我已将自己的头添加到消息中,我需要在调用消费者之前对其进行处理,以为消费者设置DB上下文(这些头允许我设置连接到正确DB的NHibernate会话,我不希望在每个消费者中都处理这些会话)。 我正在使用Autofac,我已经创建了IInboundMessageInterceptor的一个实现,它处理消息头。我向Autofac注册了拦截器,它可以很好地解析每条消息。 但是当我到达我的消费者时,每个被处理的消息的生存期范围是不同的,我在MessageInterceptor中配置的会话不再在新的生存期范

我已将自己的头添加到消息中,我需要在调用消费者之前对其进行处理,以为消费者设置DB上下文(这些头允许我设置连接到正确DB的NHibernate会话,我不希望在每个消费者中都处理这些会话)。 我正在使用Autofac,我已经创建了IInboundMessageInterceptor的一个实现,它处理消息头。我向Autofac注册了拦截器,它可以很好地解析每条消息。 但是当我到达我的消费者时,每个被处理的消息的生存期范围是不同的,我在MessageInterceptor中配置的会话不再在新的生存期范围中配置

a) 有没有办法在与使用者相同的生命周期内处理MessageInterceptor? b) 在与使用者相同的范围内,是否还有其他地方可以拦截所有消息并处理头?我查看了BeforeConsumingMessage,但它没有我可以看到的当前消息的上下文


谢谢

Autofac并不真正了解MassTransit。对象的解析是在
Func
后面抽象的,因此它不绑定到任何容器。与这些选择相关的是,目前还没有一种方式可以说“这是一个会话”,也没有在解析消费者时的范围


我现在想不出一种方法可以在不拆开内部结构的情况下进行设置。我会将一个问题发布到,也许我们可以想出一个合理的方法来共同解决这个问题

如果您正在管理生存期范围,您确实应该在
IConsumerFactory
级别进行拦截,而不是使用消息拦截器

查看
autofaccumerfactory
的源代码,您可以创建自己的实现来装饰它,也可以自定义并使用自己的实现来管理事务范围,而不是嵌套它们,从而在这方面造成复杂性

这样,消费者收到的任何消息都会使用适当的
ISession
设置进行包装