2016-06-30 1 views
1

Есть ли способ настроить Rebus и Autocac, чтобы свойства в заголовках сообщений могли использоваться для настройки служб в Autofac в сценарии зависимостей типа pr?Rebus: возможно ли получить заголовки сообщений в экземпляре Autofac pr dependecy

Вариант использования - это служба, имеющая идентификатор приложения в заголовках сообщений и устанавливающая правильные учетные данные на основе сообщения pr.

ответ

0

Да, это определенно возможно - текущий контекст сообщения имеет заголовки, и он готов и доступен в момент разрешения обработчиков.

Это просто вопрос регистрации фабричного метода с Autofac, а затем вы можете получить доступ к контексту сообщения через статическое свойство MessageContext.Current.

Я не знаю, как это выглядит с Autofac, но с Виндзор я хотел бы сделать что-то вроде этого:

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() 
); 

Я надеюсь, что вы можете перевести фрагмент Виндзорский к чему-то эквивалент в Autofac.

+0

MessageContext.Current доступен в контексте DI? –

+0

Да, это: это просто статический шлюз к экземпляру 'MessageContext', который привязан к потоку с использованием' LogicalCallContext', поэтому он корректно перетекает в продолжения. – mookid8000

+0

Спасибо за ввод –

Смежные вопросы