NServiceBus,找不到消息类型的saga

NServiceBus,找不到消息类型的saga,nservicebus,Nservicebus,我下面的故事没有处理ValidateRegistration和ValidateRegistration命令。我看到“找不到消息类型Registrations.Messages.ValidateRegistration with id…”消息 我寻找传奇的配置是否不正确?请帮忙 谢谢 PS:我在注册过程中使用的是通用主机,我使用的是NServiceBus.Lite配置文件 public class EndpointConfig : IConfigureThisEndpoint, AsA_Publi

我下面的故事没有处理ValidateRegistration和ValidateRegistration命令。我看到“找不到消息类型Registrations.Messages.ValidateRegistration with id…”消息

我寻找传奇的配置是否不正确?请帮忙

谢谢

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
}
公共类EndpointConfig:IConfigureThisEndpoint,AsA_发布者,IWantCustomInitialization
{
#IWantCustomInitialization的区域实现
公共void Init()
{
var kernel=新的标准内核();
Load(新的BackendModule());
//Configure.Instance.Configurer.ConfigureProperty(x=>x.Factory,kernel.Get());
Configure.With().NinjectBuilder(内核);
}
#端区
}
公共类注册Agadata:IContainSagaData
{
#Isaga实体的区域实施
公共虚拟Guid Id{get;set;}
公共虚拟字符串发起者{get;set;}
公共虚拟字符串OriginalMessageId{get;set;}
公共虚拟注册ID注册ID{get;set;}
公共虚拟bool已验证{get;set;}
公共虚拟字符串注册类型{get;set;}
#端区
}
公共类注册Aga:Saga,
我开始发短信,
我的手机短信,
IHandleMessages
{
公共注册工厂工厂{get;set;}
公共覆盖无效配置HowtoFindsaga()
{
配置映射(data=>data.RegistrationID,registration=>registration.ID);
配置映射(data=>data.RegistrationID,registration=>registration.ID);
配置映射(data=>data.RegistrationID,registration=>registration.ID);
}
#IMessageHandler的区域实现
公共无效句柄(StartRegistration消息)
{
Data.IsValidated=false;
Data.RegistrationType=message.RegistrationType;
Bus.SendLocal(新创建的注册)
{
注册类型=message.RegistrationType,
ID=message.ID
});
Console.WriteLine(“处理的StartRegistration”);
}
#端区
#IMessageHandler的区域实现
公共无效句柄(ValidateRegistration消息)
{
MarkAsComplete();
Console.WriteLine(===>handled ValidateRegistration”);
}
#端区
#IMessageHandler的区域实现
公共无效句柄(取消注册消息)
{
Console.WriteLine(===>handled CancelRegistration”);
MarkAsComplete();
}
#端区
}

就在今天,我听说Ninject不直接处理setter注入-尝试将其切换到构造函数注入,看看是否有效。

您的StartRegistration处理程序没有将RegistrationID添加到Saga的数据中。因此,当处理其他命令时,您对ConfigureHowToFindSaga的覆盖映射到一个没有值的属性上。

Hi Udi,我刚刚尝试过,但我得到了“InvalidOperationException:Sagas实现IConfigurable,liek tho…必须有一个默认构造函数”。Hi Udi,我想你的回答适用于我的另一个问题:)你是对的。我意识到我错过了它,但它仍然不起作用。问题在于RegistrationID属性的类型。它的类型是RegistrationID。我使用了一个Guid,它工作了。不过我会接受你的回答。谢谢。我想只要你的
RegistrationID
类正确地实现了平等,它就会起作用。