Как удалить NHibernateMessageModule от вызова в NServiceBus? - PullRequest
0 голосов
/ 09 июня 2010

Я не использую постоянство саги nhibernate, и поэтому мне не нужен NHibernateMessageModule.

Так, как мне удалить это?

Ответы [ 2 ]

0 голосов
/ 04 августа 2010

Вы должны удалить модуль из контейнера перед запуском шины, потому что после этого он кэшируется.Вы можете сделать это, вызвав .RunCustomAction () перед .CreateBus (). Start () и включив туда свой код.

Внутренне CastleWindsorBuilder делает это:

Component.For (GetAllServiceTypesFor(concreteComponent)). ImplementedBy (concreteComponent);

Таким образом, вам также может понадобиться удалить компонент для всех зарегистрированных интерфейсов, то есть IMessageModule.

0 голосов
/ 09 июня 2010

Пока у меня есть это.

Примечание. Я использую Castle Windsor в качестве контейнера.

После того, как NServiceBus выполнил настройку

var container = new WindsorContainer();
NServiceBus.Configure.With()
    .CastleWindsorBuilder(container)
    .XmlSerializer()
    .MsmqTransport()
        .IsTransactional(false)
        .PurgeOnStartup(false)
    .UnicastBus()
        .ImpersonateSender(false)
        .LoadMessageHandlers();

Я удаляю компонент из замка Виндзор

container.Kernel.RemoveComponent("NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule");

Не самый элегантный подход, но он работает.

Я надеюсь, что есть лучший способ.

...