2014-10-09 3 views
0

У меня есть архитектура CQRS, которая все подключена с помощью установщиков Windsor и Windsor. Проблема возникает сейчас, когда мы подключаем NServiceBus.Установщик NServiceBus и Windsor

Сейчас у нас есть командный обработчик со следующей подписью

public class MyCommandHandler : Handles<MyCommand> 
{ 
    public MyCommandHandler(IDomainEvents events) 
    { 
     /// bla bla 
     events.Raise<MyEvent>(); 
    } 
} 

Я хочу, чтобы изменить это, вводя IBUS и имеют следующую реализацию кодовая

public class MyCommandHandler : Handles<MyCommand> 
{ 
    public MyCommandHandler(IBus bus) 
    { 
     /// bla bla 
     bus.Send("MyQueue", myMessage); 
    } 
} 

Так что для того, чтобы сделать это, я необходимо создать установщик Windervor клиента NServiceBus и загрузите клиентскую шину из Windsor. Я хоть что-то вроде этого

public class BusClientInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     IBus bus = ConfigureBus(); 
     container.Register(Component.For<IBus>().Instance(bus)); 
    } 
} 

И я настраиваю мой автобус в методе ниже

var busConfiguration = new BusConfiguration(); 
    /// configuration 
    var bus = Bus.Create(busConfiguration); 
    return bus; 

это правильный подход? Должен ли я использовать Factory, который создает новый экземпляр шины для каждого обработчика или нормально иметь экземпляр шины SingleTon? Обработчики выполняются в контроллере Web API.

ответ

1

Похоже, вы используете NServiceBus версию 5? Код конфигурации изменился с версии 4.x, поэтому я не так хорошо знаком с ним, но основной принцип тот же: передайте экземпляр вашего контейнера в код, который настраивает шину, и пусть NServiceBus обрабатывает свою собственную регистрацию.

Из docs:

// Castle with a container instance 
configuration.UseContainer<WindsorBuilder>(c => c.ExistingContainer(windsorContainer)); 

Это будет регистрировать автобус и все обработчики NServiceBus в контейнере (нет необходимости регистрировать все это вручную).

+0

Должен ли я по-прежнему запускать автобус после регистрации? – Raffaeu

+1

Да, приведенный выше шаг является частью создания конфигурации, которая передается в Bus.Create. Опять же, я предполагаю, что вы используете 5.x. –

+1

Да, я работаю над версией 5 На самом деле все документы на NServiceBus ссылаются на 4 синтаксиса API, которые совершенно разные, и они объявили все Fluent API устаревшими, поэтому мы даже не можем скомпилировать с использованием 5 со старым синтаксисом. Btw это работает, спасибо! – Raffaeu

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