1

我正在尝试连接我的第一个 Saga,但无法让接收端点正确处理启动消息。我得到以下异常:

SagaMessageHandler 处理消息失败。Spring.Objects.Factory.UnsatisfiedDependencyException:创建名称为“NServiceBus.Sagas.Impl.SagaMessageHandler”的对象时出错:通过对象属性“Persister”表示不满足的依赖关系:有 2 个类型为 [NServiceBus.Saga.ISagaPersister] 的对象用于按类型自动装配,当应该只有 1 个能够自动装配对象“NServiceBus.Sagas.Impl.SagaMessageHandler”的属性“Persister”时。

我猜内存中的持久化器和 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 时,传奇工作正常,没有自定义初始化,但出于其他原因我需要使用它。

4

1 回答 1

1

nservicebus 配置文件正在为您配置持久性 (http://www.nservicebus.com/Profiles.aspx)

NServiceBus.Lite(默认)= InMemory

NServiceBus.Integration = NHibernate + Sqlite

NServiceBus.Production = NHibernate

因此,在您的情况下,您可以删除对 NHibernateSagaPersister() 的调用并让配置文件完成它的工作。

于 2011-07-08T21:33:04.603 回答