每个事件完成后如何在 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 (将#修改为@)