using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Serein.Library.Api { #nullable enable /// /// 流程运行接口 /// public interface IFlowControl { /// /// 单例模式IOC容器,内部维护了一个实例字典,默认使用类型的FullName作为Key,如果以“接口-实现类”的方式注册,那么将使用接口类型的FullName作为Key。 /// 当某个类型注册绑定成功后,将不会因为其它地方尝试注册相同类型的行为导致类型被重新创建。 /// ISereinIOC IOC { get; } /// /// 需要你提供一个由你实现的ISereinIOC接口实现类 /// 当你将流程运行环境集成在你的项目时,并希望流程运行时使用你提供的对象,而非自动创建 /// 就需要你调用这个方法,用来替换运行环境的IOC容器 /// 注意,是流程运行时,而非运行环境 /// /// /// 用于每次启动时,重置IOC后默认注册某些类型 void UseExternalIOC(ISereinIOC ioc, Action? setDefultMemberOnReset = null); /// /// 开始运行流程 /// /// 需要运行的流程Guid /// Task StartFlowAsync(string[] canvasGuids); /// /// 从选定的节点开始运行 /// /// /// Task StartFlowAsync(string startNodeGuid); /// /// 从选定的节点开始运行 /// /// /// Task StartFlowAsync(string startNodeGuid); /// /// 结束运行 /// Task ExitFlowAsync(); /// /// 激活未启动的全局触发器 /// /// void ActivateFlipflopNode(string nodeGuid); /// /// 终结一个全局触发器,在它触发后将不会再次监听消息(表现为已经启动的触发器至少会再次处理一次消息,后面版本再修正这个非预期行为) /// /// void TerminateFlipflopNode(string nodeGuid); /// /// 流程启动器调用,监视数据更新通知 /// /// 更新了数据的节点Guid /// 更新的数据 /// 更新的数据 void MonitorObjectNotification(string nodeGuid, object monitorData, MonitorObjectEventArgs.ObjSourceType sourceType); /// /// 流程启动器调用,节点触发了中断 /// /// 被中断的节点Guid /// 被触发的表达式 /// 中断类型。0主动监视,1表达式 void TriggerInterrupt(string nodeGuid, string expression, InterruptTriggerEventArgs.InterruptTriggerType type); /// /// 调用流程接口,将返回 FlowResult.Value。如果需要 FlowResult 对象,请使用该方法的泛型版本。 /// /// 流程接口节点Guid /// 调用时入参参数 /// Task InvokeAsync(string apiGuid, Dictionary dict); /// /// 调用流程接口,将返回 FlowResult.Value。如果需要 FlowResult 对象,请使用该方法的泛型版本。 /// /// 流程接口节点Guid /// 调用时入参参数 /// Task InvokeAsync(string apiGuid, Dictionary dict); } }