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 中的等效内容。
是否有设置 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 中的等效内容。