NServiceBus и wcf ServiceHost

У меня есть wcf ServiceHost, который должен опубликовать сообщение в IBus.

Как мне изящно получить доступ к IBus из класса хоста (который создается wcf)?


person Stig    schedule 10.08.2011    source источник
comment
Стиг, вы размещаете свою службу WCF внутри NServiceBus.Host.exe?   -  person Eric Farr    schedule 10.08.2011
comment
да, я размещаю wht wcf в NServiceBus.Host.exe   -  person Stig    schedule 11.08.2011


Ответы (2)


Что мы делаем (может быть более чистый способ), так это то, что у нас есть класс, который реализует IWantToRunAtStartup. Мы даем этому классу свойство IBus, которое инициализируется контейнером DI, встроенным в NServiceBus.

Затем мы создаем экземпляр нашего класса веб-службы (тот, который имеет атрибут ServiceBehavior), передавая экземпляр IBus из класса запуска. Затем мы создаем экземпляр нашего ServiceHost из этого экземпляра.

Это кажется немного неуклюжим, но у нас не было никаких проблем с этим. Надеюсь, это поможет.

person Eric Farr    schedule 11.08.2011
comment
спасибо, упустил момент, что служба wcf может быть создана с помощью экземпляра. - person Stig; 19.09.2011

Это должно обеспечить вам более удобный доступ к IBus. Назовите статический класс как хотите. Не беспокойтесь о совместном использовании экземпляра IBus — шина полностью потокобезопасна.

public static class BusAccess
{
    private static IBus bus;

    public static IBus Bus
    {
        get
        {
            if (bus == null)
                bus = NServiceBus.Configure.Instance.Builder.Build<IBus>();
            return bus;
        }
    }
}
person David Boike    schedule 11.08.2011
comment
Не менее тестируемый, чем интерфейс IBus. Он заполняется любой реализацией, настроенной в контейнере DI, он просто предоставляет вам доступ к нему в классе, созданном WCF. Для тестирования создайте класс TestableBus, реализующий интерфейс IBus, и настройте его при запуске теста. Затем этот класс BusAccess предоставит тестируемому коду доступ к этому. - person David Boike; 20.09.2011