2011-07-08 13 views
1

私は最初のSagaを結成しようとしており、受信側のエンドポイントに開始メッセージを正しく処理させることができませんでした。NHibernateSagaPersisterとのオートワイヤー競合を解決するにはどうしたらいいですか?

SagaMessageHandler失敗した処理 メッセージが表示されます。 Spring.Objects.Factory.UnsatisfiedDependencyException:「NServiceBus.Sagas.Impl.SagaMessageHandler」 を名前 を持つオブジェクトを作成 エラー:不満の依存関係は、オブジェクトプロパティ「存続」を介して を表明: タイプ の2つのオブジェクトがあります[NServiceBus.Saga .ISagaPersister]種類によって autowireため、 がされている必要があるときだけ1 autowireプロパティに オブジェクト「NServiceBus.Sagas.Impl.SagaMessageHandler」の存続」できるようにします。

メモリ内のペリスターとNHibernateSagaPersisterの両方が競合していると推測していますが、これを解決する方法がわかりません。私はしかし、もちろん、私のハンドラが呼び出されることはありませんLoadMessageHandlersを()、エラーが消え削除した場合

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(); 

    } 
} 

:私の構成はこれです。何がここに間違っているアイデア?プロダクションプロファイルでAsA_Serverをカスタム初期化せずに使用している場合、サガは正常に動作しますが、他の理由でそれを使用する必要があります。

答えて

1

nservicebusプロファイルは

NServiceBus.Lite(デフォルト)=インメモリ

NServiceBus.Integration = NHibernateは+(http://www.nservicebus.com/Profiles.aspx)あなたのための存続を設定していますsqliteの

NServiceBus.Production = NHibernateのは

だからあなたの場合には、あなたはNHibernateSagaPersister(への呼び出しを削除)し、プロファイルはそれが仕事だ任せることができます。

+0

IWantCustomInitializationを使用しても、 – jlew

+0

より多くの制御が必要な場合は、独自のプロファイルを追加することができます –

+0

非汎用ホストの場合は流暢な設定だけが必要ですか?または他の状況の下で? – jlew

関連する問題