Rebus:是否可以在Autofac实例中获取邮件头

时间:2016-06-30 10:54:30

标签: rebus

有没有办法设置Rebus和Autocac,以便在实例pr依赖关系场景中,可以使用消息头中的属性来设置Autofac中的服务?

用例是一种服务,它在邮件头中具有应用程序ID,并在pr消息的基础上设置正确的凭据。

1 个答案:

答案 0 :(得分:0)

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

只需使用Autofac注册工厂方法,然后就可以通过静态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中的等效内容。