小编quo*_*rti的帖子

如何在 C# 中使用 Automatonymous 实现状态机

我正在尝试使用 Automatonymous 和 RabbitMQ 为状态机实现一个简单的示例/演示。不幸的是,我找不到一个可以重建/学习的东西(我找到了ShoppingWeb,但在我看来它绝不简单)。同样在我看来,文档缺乏信息。

这是我想到的状态机示例(对不起,它很丑): 在此处输入图片说明 请注意,这个例子完全是虚构的,它是否有意义并不重要。这个项目的目的是让 Automatonymous 变得“温暖”。

我想做/拥有的是:

  • 正在运行的四个应用程序:
    1. 状态机本身
    2. “请求者”发送要解释的请求
    3. “验证器”或“解析器”检查提供的请求是否有效
    4. 解释给定请求的“解释器”
  • 这方面的一个例子可能是:
    • 请求者发送“x=5”
    • 验证器检查是否包含“=”
    • 口译员说“5”

我的状态机实现如下所示:

public class InterpreterStateMachine : MassTransitStateMachine<InterpreterInstance>
    {
        public InterpreterStateMachine()
        {
            InstanceState(x => x.CurrentState);
            Event(() => Requesting, x => x.CorrelateBy(request => request.Request.RequestString, context => context.Message.Request.RequestString)
                .SelectId(context => Guid.NewGuid())); 
            Event(() => Validating, x => x.CorrelateBy(request => request.Request.RequestString, context => context.Message.Request.RequestString));
            Event(() => Interpreting, x => x.CorrelateBy(request => request.Request.RequestString, context => context.Message.Request.RequestString));

            Initially(
                When(Requesting)
                    .Then(context =>
                    {
                        context.Instance.Request = new Request(context.Data.Request.RequestString);                        
                    }) …
Run Code Online (Sandbox Code Playgroud)

c# masstransit state-machine rabbitmq automatonymous

4
推荐指数
1
解决办法
2444
查看次数