2

以下の私の物語は、ValidateRegistration および ValidateRegistration コマンドを処理していません。「id ... のメッセージ タイプ Registrations.Messages.ValidateRegistration のサガが見つかりませんでした」というメッセージが表示されます。

サガを見つけるための構成が正しくありませんか? 助けてください!

ありがとう

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
}
4

2 に答える 2

2

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

于 2012-04-19T18:51:38.573 に答える
0

ちょうど今日、Ninject はそのままではセッター インジェクションを処理しないと聞きました。コンストラクタ インジェクションに切り替えてみて、それが機能するかどうかを確認してください。

于 2012-04-17T21:30:44.617 に答える