关于Workflow Core代码中泛型、CreateUser及step/data对象的技术问询
public class MyData { public string Email { get; set; } public string Password { get; set; } public string UserId { get; set; } } public class MyWorkflow : IWorkflow { public void Build(IWorkflowBuilder<MyData> builder) { builder .StartWith<CreateUser>() .Input(step => step.Email, data => data.Email) .Input(step => step.Password, data => data.Password) .Output(data => data.UserId, step => step.UserId) .Then<SendConfirmationEmail>() .WaitFor("confirmation", data => data.UserId) .Then<UpdateUser>() .Input(step => step.UserId, data => data.UserId); } }
问题1:StartWith<CreateUser>()中CreateUser类型的作用
CreateUser是Workflow Core框架中的步骤实现类,必须实现IStepBody接口(或继承StepBody抽象类),用来封装「创建用户」的具体业务逻辑:
- 工作流执行到这一步时,框架会自动实例化
CreateUser类 - 通过
.Input()方法传入的Email和Password,会被赋值给CreateUser类的对应属性,作为业务逻辑的输入 - 完成创建用户操作后,它会输出生成的UserId,通过
.Output()方法回写到工作流的上下文数据MyData中
它是工作流里的一个独立业务单元,把具体逻辑和工作流编排逻辑解耦,让流程定义更清晰。
问题2:step和data对象的类型与含义
- step对象:类型为
CreateUser。因为StartWith<CreateUser>()明确指定了当前步骤的实现类是CreateUser,所以.Input()方法的lambda参数step就是这个类的实例,用来给步骤的输入属性(比如step.Email)赋值。 - data对象:类型为
MyData。从IWorkflowBuilder<MyData>可以看出,整个工作流的上下文数据类型是MyData,data就是这个上下文的实例,存储着工作流全程的状态数据(比如初始传入的Email、Password,后续生成的UserId),用于在不同步骤之间传递数据。
确定它们类型的方法:
- 步骤类的类型直接看
StartWith<>或Then<>中的泛型参数 - 上下文数据类型看
IWorkflowBuilder<>的泛型参数,也就是工作流绑定的业务数据类型
内容的提问来源于stack exchange,提问作者asfand hikmat
相关产品推荐
相关产品推荐

