2012-04-17 9 views
2

以下の記事は、ValidateRegistrationコマンドとValidateRegistrationコマンドを処理していません。私は、 "メッセージタイプRegistrations.Messages.ValidateRegistration with ID ..."メッセージのサガを見つけることができませんでした。NServiceBus、メッセージタイプのサガを見つけることができませんでした

私の設定では、sagaが正しくないことがわかりましたか?助けてください!

おかげ

PS:私は、登録プロセス中に、一般的なホストを使用していますが、私はNServiceBus.Liteプロファイルを使用しています。

public class EndpointConfig : IConfigureThisEndpoint, AsA_Publisher, IWantCustomInitialization 
{ 
    #region Implementation of IWantCustomInitialization 

    public void Init() 
    { 
     var kernel = new StandardKernel(); 
     kernel.Load(new BackendModule()); 

     //Configure.Instance.Configurer.ConfigureProperty<RegistrationSaga>(x => x.Factory, kernel.Get<IAggregateRootFactory>()); 
     Configure.With().NinjectBuilder(kernel); 
    } 

    #endregion 
} 

public class RegistrationSagaData : IContainSagaData 
{ 
    #region Implementation of ISagaEntity 

    public virtual Guid Id { get; set; } 
    public virtual string Originator { get; set; } 
    public virtual string OriginalMessageId { get; set; } 

    public virtual RegistrationID RegistrationID { get; set; } 
    public virtual bool IsValidated { get; set; } 
    public virtual string RegistrationType { get; set; } 

    #endregion 
} 

public class RegistrationSaga : Saga<RegistrationSagaData>, 
           IAmStartedByMessages<StartRegistration>, 
           IHandleMessages<ValidateRegistration>, 
           IHandleMessages<CancelRegistration> 
{ 
    public RegistrationFactory Factory { get; set; } 

    public override void ConfigureHowToFindSaga() 
    { 
     ConfigureMapping<StartRegistration>(data => data.RegistrationID, registration => registration.ID); 
     ConfigureMapping<ValidateRegistration>(data => data.RegistrationID, registration => registration.ID); 
     ConfigureMapping<CancelRegistration>(data => data.RegistrationID, registration => registration.ID); 
    } 

    #region Implementation of IMessageHandler<StartRegistration> 

    public void Handle(StartRegistration message) 
    { 
     Data.IsValidated = false; 
     Data.RegistrationType = message.RegistrationType; 

     Bus.SendLocal(new CreateRegistration 
     { 
      RegistrationType = message.RegistrationType, 
      ID = message.ID 
     }); 

     Console.WriteLine("======> handled StartRegistration"); 
    } 

    #endregion 

    #region Implementation of IMessageHandler<ValidateRegistration> 

    public void Handle(ValidateRegistration message) 
    { 
     MarkAsComplete(); 

     Console.WriteLine("======> handled ValidateRegistration"); 
    } 

    #endregion 

    #region Implementation of IMessageHandler<CancelRegistration> 

    public void Handle(CancelRegistration message) 
    { 
     Console.WriteLine("======> handled CancelRegistration"); 

     MarkAsComplete(); 
    } 

    #endregion 
} 

答えて

2

StartRegistrationのハンドラは、SagaのデータにRegistrationIDを追加していません。つまり、ConfigureHowToFindSagaのオーバーライドは、他のコマンドが処理されたときに値を持たないプロパティにマップされます。

+0

あなたは正しいです。私はそれを逃したことに気付きましたが、それでもうまくいきませんでした。問題は、RegistrationIDプロパティのタイプにありました。それはタイプRegistrationIDでした。私は代わりにGuidを使用し、それは働いた。私はあなたの答えを受け入れるでしょう。ありがとう。 –

+0

あなたの 'RegistrationID'クラスが適切に同等性を実装している限り、それがうまくいくと思います。 –

0

ちょうど今日、私はNinjectが箱から出してセッター・インジェクションを処理しないことを聞いた - コンストラクタ・インジェクションへの切り替え試してみて、それが動作するかどうかを確認します。

+0

こんにちはUdi、私はちょうどそれを試みたが、私は "InvalidOperationException:SagasはIConfigurable、liek tho ....を実装するデフォルトのコンストラクタを持っている必要があります。 –

+0

こんにちはUdi、私はあなたの答えはここに私の他の質問に適用されると思います:http://stackoverflow.com/questions/10158739/nservicebus-saga-property-injection-with-ninject :) –

関連する問題