如何解决每个事件完成后如何在 Automatonymous 状态机中发布事件?
我有一个包含一堆事件的 Automatonymous 状态机。 我想在前一个事件完成后发布每个事件。我知道我可以在每个事件的消费者中发布它,但其中一些可能会在不同的状态机中重用,所以我想在状态机定义中声明它。这是我现在所拥有的:
public class TestStateMachine : MasstransitStateMachine<TestState>
{
public State StepOneCompleted { get; set; }
public State StepTwoCompleted { get; set; }
public State StepThreeCompleted { get; set; }
public Event<ProcessstepOne> ProcessstepOne { get; set; }
public Event<ProcessstepTwo> ProcessstepTwo { get; set; }
public Event<ProcessstepThree> ProcessstepThree { get; set; }
public TestStateMachine()
{
InstanceState(x => x.CurrentState);
Initially(When(ProcessstepOne)
.Publish(context => new ProcessstepTwo
{
CorrelationId = context.Data.CorrelationId,})
.TransitionTo(StepOneCompleted));
During(StepOneCompleted,When(ProcessstepTwo)
.Publish(context => new ProcessstepThree
{
CorrelationId = context.Data.CorrelationId,})
.TransitionTo(StepTwoCompleted));
During(StepTwoCompleted,When(ProcessstepThree).TransitionTo(StepThreeCompleted));
}
}
根据此定义,在第一步仍在执行时发布第二步,在执行第二步时发布第三步。我想确保第一步完成,然后第二步发布,然后第二步完成,第三步发布。我尝试使用 WhenLeave
行为,但它需要一个状态,而不是一个事件,因此我无法访问 context.Data
并且 CorrelationId 不仅是我将在步骤之间传递的变量。
是否有可能在状态机定义中实现这一点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。