Rebus:是否有可能在每个依赖项的 Autofac 实例中获取消息 headers

Rebus: Is it possible to get message headers in Autofac instance pr dependecy

是否有设置 Rebus 和 Autocac 的方法,以便消息 headers 中的属性可用于在实例 pr 依赖项场景中设置 Autofac 中的服务?

用例是一个服务,它在消息中有一个应用程序 ID headers,并且在 pr 消息的基础上设置了正确的凭据。

是的,这绝对有可能 - 当前消息上下文具有 headers,并且在解析处理程序时它已准备就绪并可用。

只需要在Autofac注册一个工厂方法,然后就可以通过static MessageContext.Current 属性.

访问消息上下文了

我不知道使用 Autofac 会是什么样子,但使用 Windsor 我会这样做:

container.Register(
    Component.For<ISomeService>()
        .UsingFactoryMethod(k => {
            var context = MessageContext.Current;
            if (context == null) { 
                var msg = "Must be inside Rebus handler to do this";
                throw new InvalidOperationException(msg); 
            }

            var headers = context.Headers;

            // decide which implementation of ISomeService
            // to return here.....
            return new ConcreteService();
        }, managedExternally: true)
        .LifestyleTransient()
);

希望您能将 Windsor 片段翻译成 Autofac 中的等效内容。