是否有一种方法可以设置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中等价的东西。