Как разрешить конфликт автопроводки с NHibernateSagaPersister?

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

SagaMessageHandler Не удалось обработать сообщение. Spring.Objects.Factory.UnsatisfiedDependencyException: ошибка при создании объекта с именем «NServiceBus.Sagas.Impl.SagaMessageHandler»: неудовлетворенная зависимость, выраженная через свойство объекта «Persister»: существует 2 объекта типа [NServiceBus.Saga.ISagaPersister] для автоматического подключения по типу , хотя должен был быть только 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 в производственном профиле без пользовательской инициализации, но мне нужно использовать это по другим причинам.


person jlew    schedule 08.07.2011    source источник


Ответы (1)


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

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

NServiceBus.Integration = NHibernate + Sqlite

NServiceBus.Production = NHibernate

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

person Andreas Öhlund    schedule 08.07.2011
comment
Даже с IWantCustomInitialization? - person jlew; 09.07.2011
comment
Так правда ли, что вам понадобится свободная конфигурация только для неуниверсального хоста? Или при каких еще обстоятельствах? - person jlew; 09.07.2011