有没有办法设置Rebus和Autocac,以便在实例pr依赖关系场景中,可以使用消息头中的属性来设置Autofac中的服务?
用例是一种服务,它在邮件头中具有应用程序ID,并在pr消息的基础上设置正确的凭据。
答案 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中的等效内容。