У меня есть архитектура 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.
Должен ли я по-прежнему запускать автобус после регистрации? – Raffaeu
Да, приведенный выше шаг является частью создания конфигурации, которая передается в Bus.Create. Опять же, я предполагаю, что вы используете 5.x. –
Да, я работаю над версией 5 На самом деле все документы на NServiceBus ссылаются на 4 синтаксиса API, которые совершенно разные, и они объявили все Fluent API устаревшими, поэтому мы даже не можем скомпилировать с использованием 5 со старым синтаксисом. Btw это работает, спасибо! – Raffaeu