如何解决与NHibernate Saga Persister的自动连接冲突?

时间:2011-07-08 19:51:51

标签: configuration nservicebus saga

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

  

SagaMessageHandler处理失败   信息。   Spring.Objects.Factory.UnsatisfiedDependencyException:   使用名称创建对象时出错   'NServiceBus.Sagas.Impl.SagaMessageHandler'   :表达不满意的依赖性   通过对象属性'Persister':   Type有2个对象   [NServiceBus.Saga.ISagaPersister] for   按类型自动装配,何时应该   已经只有1才能够   autowire属性'Persister'   宾语   '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而没有自定义初始化时,saga正常工作,但我需要将其用于其他原因。

1 个答案:

答案 0 :(得分:1)

nservicebus配置文件正在为您配置容器(http://www.nservicebus.com/Profiles.aspx)

NServiceBus.Lite(默认)= InMemory

NServiceBus.Integration = NHibernate + Sqlite

NServiceBus.Production = NHibernate

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