Как мне разрешить конфликт автопровода с NHibernateSagaPersister? - PullRequest
1 голос
/ 08 июля 2011

Я пытаюсь подключить свою первую Сагу, и мне не удалось заставить получающую конечную точку правильно обработать стартовое сообщение. Я получаю следующее исключение:

SagaMessageHandler Ошибка обработки сообщение. Spring.Objects.Factory.UnsatisfiedDependencyException: Ошибка создания объекта с именем 'NServiceBus.Sagas.Impl.SagaMessageHandler' : Выражена неудовлетворенная зависимость через свойство объекта 'Persister': Есть 2 объекта типа [NServiceBus.Saga.ISagaPersister] для AutoWire по типу, когда там должно был только 1, чтобы иметь возможность автопроволочная собственность 'Persister' из объект 'NServiceBus.Sagas.Impl.SagaMessageHandler'.

Я предполагаю, что персистент в памяти и NHibernateSagaPersister конфликтуют, но я не могу понять, как решить эту проблему. Моя конфигурация такая:

public class SubscriberEndpointConfig : IWantCustomInitialization, IConfigureThisEndpoint
{      
    public void Init()
    {
        _logger.Info("Subscriber is initializing..");

        Configure.With()                 
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport().IsTransactional(true).IsolationLevel(IsolationLevel.ReadCommitted).PurgeOnStartup(false)
            .UnicastBus().LoadMessageHandlers(First<GridInterceptingMessageHandler>.Then<SagaMessageHandler>())  
            .Sagas()
            .NHibernateSagaPersister()
            .Log4Net();

    }
}

Если я удаляю LoadMessageHandlers (), ошибка исчезает, но, конечно, мой обработчик никогда не вызывается. Есть идеи, что здесь не так? Сага работает правильно, когда я использую AsA_Server в производственном профиле, без пользовательской инициализации, но мне нужно использовать это по другим причинам.

1 Ответ

1 голос
/ 09 июля 2011

Профили nservicebus настраивают постоянную для вас (http://www.nservicebus.com/Profiles.aspx)

NServiceBus.Lite (по умолчанию) = InMemory

NServiceBus.Integration = NHibernate + Sqlite

NServiceBus.Production = NHibernate

Таким образом, в вашем случае вы можете удалить вызов NHibernateSagaPersister () и позволить профилям выполнять свою работу.

...