1. 重新设计了Generate项目及相关特性的命名,避免与其他类型混淆。

2. 补充了部分注释。
3. 修改了删除容器节点时,容器内子节点未正确删除的问题。
This commit is contained in:
fengjiayi
2025-07-30 21:15:07 +08:00
parent 93148b11a5
commit 152077e9b5
188 changed files with 2713 additions and 1406 deletions

View File

@@ -7,6 +7,11 @@
/// <typeparam name="TValue"></typeparam>
public interface IEnumConvertor<TEnum, TValue>
{
/// <summary>
/// 将枚举值转换为指定类型的值
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
TValue Convertor(TEnum e);
}

View File

@@ -252,11 +252,20 @@ namespace Serein.Library.Api
/// </summary>
public string Result { get; private set; }
/// <summary>
/// 上传当前节点的执行状态和结果信息。
/// </summary>
/// <param name="runState"></param>
public void UploadState(RunState runState)
{
State = runState;
TS = DateTime.Now - StateTime;
}
/// <summary>
/// 上传当前节点的执行结果值。
/// </summary>
/// <param name="value"></param>
public void UploadResultValue(object value = null)
{
if(value is null)
@@ -269,6 +278,11 @@ namespace Serein.Library.Api
Result = $"{type.FullName}::{value}";
}
}
/// <summary>
/// 上传当前节点的执行参数信息。
/// </summary>
/// <param name="values"></param>
public void UploadParameters(object[] values = null)
{
if (values is null)
@@ -282,6 +296,10 @@ namespace Serein.Library.Api
}
}
/// <summary>
/// 返回当前节点的执行信息字符串,包含状态、耗时和结果。
/// </summary>
/// <returns></returns>
public override string ToString()
{
return $"[{State}]{TS.TotalSeconds:0.000}ms : {Result}";

View File

@@ -4,6 +4,7 @@ using System.Threading.Tasks;
namespace Serein.Library.Api
{
#nullable enable
/// <summary>
/// 流程运行接口
/// </summary>
@@ -24,7 +25,7 @@ namespace Serein.Library.Api
/// </summary>
/// <param name="ioc"></param>
/// <param name="setDefultMemberOnReset">用于每次启动时重置IOC后默认注册某些类型</param>
void UseExternalIOC(ISereinIOC ioc, Action<ISereinIOC> setDefultMemberOnReset = null);
void UseExternalIOC(ISereinIOC ioc, Action<ISereinIOC>? setDefultMemberOnReset = null);
/// <summary>
/// 开始运行流程

View File

@@ -153,6 +153,9 @@ namespace Serein.Library.Api
/// </summary>
public class ProjectLoadedEventArgs : FlowEventArgs
{
/// <summary>
/// 项目加载完成事件参数
/// </summary>
public ProjectLoadedEventArgs()
{
}
@@ -163,6 +166,10 @@ namespace Serein.Library.Api
/// </summary>
public class ProjectSavingEventArgs : FlowEventArgs
{
/// <summary>
/// 项目保存事件参数
/// </summary>
/// <param name="projectData"></param>
public ProjectSavingEventArgs(SereinProjectData projectData)
{
ProjectData = projectData;
@@ -179,6 +186,10 @@ namespace Serein.Library.Api
/// </summary>
public class LoadDllEventArgs : FlowEventArgs
{
/// <summary>
/// 加载了DLL外部依赖事件参数
/// </summary>
/// <param name="nodeLibraryInfo"></param>
public LoadDllEventArgs(FlowLibraryInfo nodeLibraryInfo)
{
this.NodeLibraryInfo = nodeLibraryInfo;
@@ -194,6 +205,9 @@ namespace Serein.Library.Api
/// </summary>
public class RemoteDllEventArgs : FlowEventArgs
{
/// <summary>
/// 移除了DLL外部依赖事件参数
/// </summary>
public RemoteDllEventArgs()
{
}
@@ -270,6 +284,9 @@ namespace Serein.Library.Api
}
/// <summary>
/// 连接关系所在的画布Guid
/// </summary>
public string CanvasGuid { get; }
/// <summary>
@@ -309,11 +326,18 @@ namespace Serein.Library.Api
/// </summary>
public class CanvasCreateEventArgs : FlowEventArgs
{
/// <summary>
/// 画布添加事件参数
/// </summary>
/// <param name="model"></param>
public CanvasCreateEventArgs(FlowCanvasDetails model)
{
Model = model;
}
/// <summary>
/// 画布
/// </summary>
public FlowCanvasDetails Model { get; }
}
@@ -322,11 +346,18 @@ namespace Serein.Library.Api
/// </summary>
public class CanvasRemoveEventArgs : FlowEventArgs
{
/// <summary>
/// 画布移除事件参数
/// </summary>
/// <param name="canvasGuid"></param>
public CanvasRemoveEventArgs(string canvasGuid)
{
CanvasGuid = canvasGuid;
}
/// <summary>
/// 所处画布Guid
/// </summary>
public string CanvasGuid { get; }
}
@@ -360,10 +391,6 @@ namespace Serein.Library.Api
/// 在UI上的位置
/// </summary>
public PositionOfUI Position { get; private set; }
/// <summary>
/// 容器
/// </summary>
//public string RegeionGuid { get; private set; }
}
/// <summary>
@@ -371,12 +398,20 @@ namespace Serein.Library.Api
/// </summary>
public class NodeRemoveEventArgs : FlowEventArgs
{
/// <summary>
/// 被移除节点事件参数
/// </summary>
/// <param name="canvasGuid"></param>
/// <param name="nodeGuid"></param>
public NodeRemoveEventArgs(string canvasGuid, string nodeGuid)
{
CanvasGuid = canvasGuid;
this.NodeGuid = nodeGuid;
}
/// <summary>
/// 被移除节点所在的画布Guid
/// </summary>
public string CanvasGuid { get; }
/// <summary>
@@ -390,6 +425,12 @@ namespace Serein.Library.Api
/// </summary>
public class NodePlaceEventArgs : FlowEventArgs
{
/// <summary>
/// 节点放置事件参数
/// </summary>
/// <param name="canvasGuid"></param>
/// <param name="nodeGuid"></param>
/// <param name="containerNodeGuid"></param>
public NodePlaceEventArgs(string canvasGuid, string nodeGuid, string containerNodeGuid)
{
CanvasGuid = canvasGuid;
@@ -397,6 +438,9 @@ namespace Serein.Library.Api
ContainerNodeGuid = containerNodeGuid;
}
/// <summary>
/// 画布Guid
/// </summary>
public string CanvasGuid { get; }
/// <summary>
@@ -414,6 +458,12 @@ namespace Serein.Library.Api
/// </summary>
public class NodeTakeOutEventArgs : FlowEventArgs
{
/// <summary>
/// 节点取出事件参数
/// </summary>
/// <param name="canvasGuid"></param>
/// <param name="containerNodeGuid"></param>
/// <param name="nodeGuid"></param>
public NodeTakeOutEventArgs(string canvasGuid, string containerNodeGuid, string nodeGuid)
{
CanvasGuid = canvasGuid;
@@ -421,6 +471,9 @@ namespace Serein.Library.Api
ContainerNodeGuid = containerNodeGuid;
}
/// <summary>
/// 所在画布Guid
/// </summary>
public string CanvasGuid { get; }
/// <summary>
@@ -438,9 +491,17 @@ namespace Serein.Library.Api
/// <summary>
/// 起始节点发生了变化
/// </summary>
public class StartNodeChangeEventArgs : FlowEventArgs
{
/// <summary>
/// 起始节点发生了变化事件参数
/// </summary>
/// <param name="canvasGuid"></param>
/// <param name="oldNodeGuid"></param>
/// <param name="newNodeGuid"></param>
public StartNodeChangeEventArgs(string canvasGuid, string oldNodeGuid, string newNodeGuid)
{
CanvasGuid = canvasGuid;
@@ -448,6 +509,9 @@ namespace Serein.Library.Api
this.NewNodeGuid = newNodeGuid; ;
}
/// <summary>
/// 所在画布Guid
/// </summary>
public string CanvasGuid { get; }
/// <summary>
@@ -515,6 +579,11 @@ namespace Serein.Library.Api
/// </summary>
public class NodeInterruptStateChangeEventArgs : FlowEventArgs
{
/// <summary>
/// 节点中断状态改变事件参数
/// </summary>
/// <param name="nodeGuid"></param>
/// <param name="isInterrupt"></param>
public NodeInterruptStateChangeEventArgs(string nodeGuid,bool isInterrupt)
{
NodeGuid = nodeGuid;
@@ -526,14 +595,19 @@ namespace Serein.Library.Api
/// 中断的节点Guid
/// </summary>
public string NodeGuid { get;}
/// <summary>
/// 是否中断
/// </summary>
public bool IsInterrupt { get;}
// public InterruptClass Class { get;}
}
/// <summary>
/// 节点触发了中断事件参数
/// </summary>
public class InterruptTriggerEventArgs : FlowEventArgs
{
/// <summary>
/// 中断触发类型
/// </summary>
public enum InterruptTriggerType
{
/// <summary>
@@ -550,6 +624,12 @@ namespace Serein.Library.Api
Obj,
}
/// <summary>
/// 中断触发事件参数
/// </summary>
/// <param name="nodeGuid"></param>
/// <param name="expression"></param>
/// <param name="type"></param>
public InterruptTriggerEventArgs(string nodeGuid, string expression, InterruptTriggerType type)
{
this.NodeGuid = nodeGuid;
@@ -561,7 +641,13 @@ namespace Serein.Library.Api
/// 中断的节点Guid
/// </summary>
public string NodeGuid { get;}
/// <summary>
/// 被触发的表达式
/// </summary>
public string Expression { get;}
/// <summary>
/// 中断触发类型
/// </summary>
public InterruptTriggerType Type { get;}
}
@@ -572,6 +658,9 @@ namespace Serein.Library.Api
/// </summary>
public class IOCMembersChangedEventArgs : FlowEventArgs
{
/// <summary>
/// IOC成员发生改变的事件类型
/// </summary>
public enum EventType
{
/// <summary>
@@ -583,12 +672,23 @@ namespace Serein.Library.Api
/// </summary>
Completeuild,
}
/// <summary>
/// IOC成员发生改变事件参数
/// </summary>
/// <param name="key"></param>
/// <param name="instance"></param>
public IOCMembersChangedEventArgs(string key, object instance)
{
this.Key = key;
this.Instance = instance;
}
/// <summary>
/// IOC成员发生改变事件参数
/// </summary>
public string Key { get; private set; }
/// <summary>
/// IOC成员发生改变事件参数
/// </summary>
public object Instance { get; private set; }
}
@@ -597,38 +697,20 @@ namespace Serein.Library.Api
/// </summary>
public class NodeLocatedEventArgs : FlowEventArgs
{
/// <summary>
/// 节点需要定位事件参数
/// </summary>
/// <param name="nodeGuid"></param>
public NodeLocatedEventArgs(string nodeGuid)
{
NodeGuid = nodeGuid;
}
/// <summary>
/// 节点需要定位事件参数
/// </summary>
public string NodeGuid { get; private set; }
}
/* /// <summary>
/// 节点移动了
/// </summary>
public class NodeMovedEventArgs : FlowEventArgs
{
public NodeMovedEventArgs(string nodeGuid, double x, double y)
{
this.NodeGuid = nodeGuid;
this.X = x;
this.Y = y;
}
/// <summary>
/// 节点唯一标识
/// </summary>
public string NodeGuid { get; private set; }
/// <summary>
/// 画布上的x坐标
/// </summary>
public double X { get; private set; }
/// <summary>
/// 画布上的y坐标
/// </summary>
public double Y { get; private set; }
}*/
#endregion
@@ -729,23 +811,113 @@ namespace Serein.Library.Api
/// </summary>
event EnvOutHandler EnvOutput;
/// <summary>
/// 加载了DLL外部依赖事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnDllLoad(LoadDllEventArgs eventArgs);
/// <summary>
/// 项目加载完成事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnProjectLoaded(ProjectLoadedEventArgs eventArgs);
/// <summary>
/// 项目准备保存事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnProjectSaving(ProjectSavingEventArgs eventArgs);
/// <summary>
/// 节点连接关系发生改变事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnNodeConnectChanged(NodeConnectChangeEventArgs eventArgs);
/// <summary>
/// 画布创建事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnCanvasCreated(CanvasCreateEventArgs eventArgs);
/// <summary>
/// 画布移除事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnCanvasRemoved(CanvasRemoveEventArgs eventArgs);
/// <summary>
/// 节点创建事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnNodeCreated(NodeCreateEventArgs eventArgs);
/// <summary>
/// 节点移除事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnNodeRemoved(NodeRemoveEventArgs eventArgs);
/// <summary>
/// 节点放置事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnNodePlace(NodePlaceEventArgs eventArgs);
/// <summary>
/// 节点取出事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnNodeTakeOut(NodeTakeOutEventArgs eventArgs);
/// <summary>
/// 起始节点发生了变化事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnStartNodeChanged(StartNodeChangeEventArgs eventArgs);
/// <summary>
/// 流程运行完成事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnFlowRunComplete(FlowEventArgs eventArgs);
/// <summary>
/// 被监视的对象发生了改变事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnMonitorObjectChanged(MonitorObjectEventArgs eventArgs);
/// <summary>
/// 节点中断状态发生了改变事件(开启了中断/取消了中断)
/// </summary>
/// <param name="eventArgs"></param>
public void OnNodeInterruptStateChanged(NodeInterruptStateChangeEventArgs eventArgs);
/// <summary>
/// 触发了中断事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnInterruptTriggered(InterruptTriggerEventArgs eventArgs);
/// <summary>
/// IOC容器成员发生了改变事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnIOCMembersChanged(IOCMembersChangedEventArgs eventArgs);
/// <summary>
/// 节点需要定位事件
/// </summary>
/// <param name="eventArgs"></param>
public void OnNodeLocated(NodeLocatedEventArgs eventArgs);
/// <summary>
/// 环境输出信息事件
/// </summary>
/// <param name="type"></param>
/// <param name="value"></param>
public void OnEnvOutput(InfoType type, string value);
}
@@ -864,7 +1036,7 @@ namespace Serein.Library.Api
/// 获取当前项目信息
/// </summary>
/// <returns></returns>
Task<SereinProjectData> GetProjectInfoAsync();
SereinProjectData GetProjectInfoAsync();
#endregion

View File

@@ -1,12 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Serein.Library;
namespace Serein.Library.Api
{
@@ -72,11 +67,11 @@ namespace Serein.Library.Api
MethodDetails MethodDetails { get; set; }
/// <summary>
/// 节点集合
/// 前继节点集合
/// </summary>
Dictionary<ConnectionInvokeType, List<IFlowNode>> PreviousNodes { get;}
/// <summary>
/// 节点集合
/// 后继节点集合
/// </summary>
Dictionary<ConnectionInvokeType, List<IFlowNode>> SuccessorNodes { get; set; }

View File

@@ -118,14 +118,14 @@ namespace Serein.Library.Api
/// </summary>
/// <param name="values"></param>
/// <returns></returns>
IJsonToken CreateObject(IDictionary<string, object> values = null);
IJsonToken CreateObject(IDictionary<string, object>? values = null);
/// <summary>
/// 创建数组
/// </summary>
/// <param name="values"></param>
/// <returns></returns>
IJsonToken CreateArray(IEnumerable<object> values = null);
IJsonToken CreateArray(IEnumerable<object>? values = null);
/// <summary>
/// 将对象转换为JSON Token自动转换为 JObject/JArray。

View File

@@ -11,7 +11,9 @@ namespace Serein.Library.Api
/// </summary>
public interface INodeContainer
{
/// <summary>
/// 容器节点的Guid与 IFlowNode.Guid 相同
/// </summary>
string Guid { get; }
/// <summary>
/// 放置一个节点

View File

@@ -20,20 +20,7 @@ namespace Serein.Library.Api
/// </summary>
IFlowNode NodeModel { get; }
/// <summary>
/// 根据索引从入参数据获取数据
/// </summary>
/// <param name="context"></param>
/// <param name="index"></param>
/// <returns></returns>
//object GetArgData(IDynamicContext context, int index);
/// <summary>
/// 获取流程当前传递的数据
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
/// FlowResult GetFlowData(IDynamicContext context);
/// <summary>
/// 获取全局数据
/// </summary>

View File

@@ -108,8 +108,32 @@ namespace Serein.Library.Api
/// <param name="action"></param>
/// <returns></returns>
ISereinIOC Run<T>(Action<T> action);
/// <summary>
/// 从容器中获取数个类型的实例进行运行
/// </summary>
/// <typeparam name="T1"></typeparam>
/// <typeparam name="T2"></typeparam>
/// <param name="action"></param>
/// <returns></returns>
ISereinIOC Run<T1, T2>(Action<T1, T2> action);
/// <summary>
/// 从容器中获取数个类型的实例进行运行
/// </summary>
/// <typeparam name="T1"></typeparam>
/// <typeparam name="T2"></typeparam>
/// <typeparam name="T3"></typeparam>
/// <param name="action"></param>
/// <returns></returns>
ISereinIOC Run<T1, T2, T3>(Action<T1, T2, T3> action);
/// <summary>
/// 从容器中获取数个类型的实例进行运行
/// </summary>
/// <typeparam name="T1"></typeparam>
/// <typeparam name="T2"></typeparam>
/// <typeparam name="T3"></typeparam>
/// <typeparam name="T4"></typeparam>
/// <param name="action"></param>
/// <returns></returns>
ISereinIOC Run<T1, T2, T3, T4>(Action<T1, T2, T3, T4> action);
}