有关DSL和WorkflowCore.DSL

有关DSL和WorkflowCore.DSL

一、DSL

在编程领域中,DSL即 Domain Specific Language (特定域语言),是一种特定于特定问题领域的计算机语言,设计用于解决该领域的特定类型的问题 。

HTML是DSL的一个典型,它是在Web应用上使用的语言,尽管HTML无法进行数字运算,但也不影响它在这方面的广泛应用。

从WorkflowCore.DSL引用的包中,

<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="SharpYaml" Version="1.6.5" />
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.3.0" />

可看出它主要是解决JSON或YAML格式转换的问题。

从 JSON 或 YAML 加载工作流定义

<PackageReference Include="WorkflowCore.DSL" Version="3.13.0" />
var services = new ServiceCollection();

services.AddLogging(c =>
{
	c.SetMinimumLevel(LogLevel.Debug);
	c.AddConsole();
});

services.AddWorkflow();

# 使用 WorkflowCore.DSL
services.AddWorkflowDSL();

var sp = Ioc.Default = services.BuildServiceProvider();
var loggerFactory = sp.GetRequiredService<ILoggerFactory>();
var host = sp.GetRequiredService<IWorkflowHost>();
#region 方法1:直接代码中注册 (当不使用DSL时使用)

host.RegisterWorkflow<HelloworldWorkflow, HelloParam>();

#endregion

var loader = sp.GetRequiredService<IDefinitionLoader>();

#region 方法2:从JSON加载

loader.LoadDefinition(File.ReadAllText("json1.json"), Deserializers.Json);

#endregion

#region 方法3:从YAML加载

loader.LoadDefinition(File.ReadAllText("yaml1.yaml"), Deserializers.Yaml);

#endregion

host.Start();

await host.StartWorkflow("HelloworldWorkflow", new HelloParam { });

Console.ReadLine();

host.Stop();

json1.json

{
  "Id": "HelloworldWorkflow",
  "Version": 1,
  "Steps": [
    {
      "Id": "Hello",
      "StepType": "DemoWorkflowCore.Models.HelloStepBody, DemoWorkflowCore",
      "NextStepId": "End"
    },
    {
      "Id": "End",
      "StepType": "DemoWorkflowCore.Models.EndStepBody, DemoWorkflowCore"
    }
  ]
}

yaml1.yaml

Id: HelloworldWorkflow
Version: 1
Steps:
  - Id: Hello
    StepType: DemoWorkflowCore.Models.HelloStepBody, DemoWorkflowCore
    NextStepId: End
  - Id: End
    StepType: DemoWorkflowCore.Models.EndStepBody, DemoWorkflowCore

二、WorkflowCore.DSL

Workflow

  • Id
  • Version
  • Description
  • Steps

Step

  • Id
  • StepType
  • NextStepId
  • Inputs - (key/value)
  • Outputs - (key/value)
  • CancelCondition

StepType 格式:<类名>, <程序集>
Inputs 的key如果以’@'开头,value可为Expression表达式
Inputs的Expression中可以使用环境变量。environment[“变量名”]

转换过程

json/yaml : string ----> DefinitionSourceV1 ------------> WorkflowDefinition
                    |--> ICollection<StepSourceV1> -->|

然后,使用RegisterWorkflow方法注册WorkflowDefinition。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值