Rebus:是否有可能在Autofac实例依赖关系中获取消息头?



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

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

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

只需在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中等价的东西。

相关内容

  • 没有找到相关文章

最新更新