2012-04-17 22 views
2

我的傳奇下面沒有處理ValidateRegistration和ValidateRegistration命令。我看到「找不到消息類型Registrations.Messages.ValidateRegistration帶ID的消息」的消息。NServiceBus,找不到消息類型的傳奇

我的配置查找傳奇不正確?請幫忙!

感謝

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的處理程序不會將註冊ID添加到佐賀的數據中。因此,在處理其他命令時,您的對ConfigureHowToFindSaga的覆蓋映射到一個沒有值的屬性。

+0

你是對的。我意識到我錯過了它,但它仍然沒有奏效。問題在於RegistrationID屬性的類型。它的類型是RegistrationID。我用了Guid,它工作。儘管我會接受你的回答。謝謝。 – 2012-04-19 20:26:53

+0

我懷疑它會起作用,只要你的'RegistrationID'類正確地實現了平等。 – 2015-01-07 16:42:40

0

就在今天,我聽說Ninject不會處理setter注入開箱問題 - 嘗試將它切換到構造函數注入並查看它是否有效。

+0

嗨Udi,我只是試過,但我得到了「InvalidOperationException:Sagas實現IConfigurable,liek tho ....必須有一個默認的構造函數。」 – 2012-04-17 21:46:02

+0

嗨再次Udi,我認爲你的答案適用於我在這裏的其他問題:http://stackoverflow.com/questions/10158739/nservicebus-saga-property-injection-with-ninject :) – 2012-04-19 19:54:23

相關問題