elsa-integration-notes.md 3.0 KB

Elsa Workflows 集成说明

问题背景

YZWater3 项目需要集成工作流引擎来实现工艺流程编排。经过评估,选择了 Elsa Workflows 作为候选方案。

遇到的问题

1. API 不兼容

安装 Elsa.Workflows.Core 3.7.1 后,发现以下命名空间不存在:

  • Elsa.Workflows.Contracts
  • Elsa.Workflows.Runtime
  • Elsa.Workflows.Runtime.Messages

2. 需要完整的 DI 容器

Elsa 3.x 需要完整的依赖注入容器配置,不适合直接在桌面应用中使用。

3. 需要额外的 NuGet 包

完整功能需要安装:

  • Elsa.Workflows.Core
  • Elsa.Workflows.Runtime
  • Elsa.Activities.Console
  • Elsa.Activities.Http
  • 等...

当前解决方案

简化版工作流服务

创建了自定义的 WorkflowService,提供基本的工作流功能:

// 初始化
await WorkflowService.Instance.InitializeAsync();

// 执行工作流
var result = await WorkflowService.Instance.ExecuteWorkflowAsync("WastewaterTreatment", context);

// 注册自定义工作流
WorkflowService.Instance.RegisterWorkflow("MyWorkflow", definition);

工作流定义

var workflow = new WorkflowDefinition
{
    Name = "污水处理流程",
    Description = "自动检测液位、流量,控制泵启停",
    Steps = new List<WorkflowStep>
    {
        new() { Name = "CheckTankLevel", Action = CheckTankLevel },
        new() { Name = "CheckFlowRate", Action = CheckFlowRate },
        new() { Name = "ControlPump", Action = ControlPump }
    }
};

完整 Elsa 集成方案(未来参考)

所需 NuGet 包

<PackageReference Include="Elsa.Workflows.Core" Version="3.7.1" />
<PackageReference Include="Elsa.Workflows.Runtime" Version="3.7.1" />
<PackageReference Include="Elsa.Activities.Console" Version="3.7.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />

配置代码

using Elsa.Extensions;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();

services.AddElsa(elsa =>
{
    elsa.AddActivitiesFrom<Program>();
    elsa.UsePersistence(new MemoryWorkflowStateProvider());
});

var serviceProvider = services.BuildServiceProvider();

执行工作流

using var scope = serviceProvider.CreateScope();
var workflowRunner = scope.ServiceProvider.GetRequiredService<IWorkflowRunner>();
var workflow = new Workflow(new Sequence { ... });
var result = await workflowRunner.RunAsync(workflow);

替代方案

如果未来需要更强大的工作流引擎,可以考虑:

  1. WorkflowCore - 更轻量,API 更简单
  2. CoreWF - .NET Workflow Foundation 的移植版
  3. 自建简单状态机 - 对于简单场景足够

总结

当前使用简化版工作流服务满足基本需求。如果未来需要:

  • 工作流持久化
  • 可视化设计器
  • 复杂分支/并行执行
  • 与外部系统集成

建议重新评估 Elsa Workflows 的完整集成方案,或考虑替代方案。


创建时间: 2026-09-01
状态: 待后续完善