微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

每个事件完成后如何在 Automatonymous 状态机中发布事件?

如何解决每个事件完成后如何在 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 举报,一经查实,本站将立刻删除。