diff --git a/Library.Core/DynamicContext.cs b/Library.Core/DynamicContext.cs
index 8f4eae4..f2ade60 100644
--- a/Library.Core/DynamicContext.cs
+++ b/Library.Core/DynamicContext.cs
@@ -33,7 +33,8 @@ namespace Serein.Library.Core
///
/// 用来在当前流程上下文间传递数据
///
- public Dictionary ContextShareData { get; } = new Dictionary();
+ //public Dictionary ContextShareData { get; } = new Dictionary();
+ public object Tag { get; set; }
///
/// 当前节点执行完成后,设置该属性,让运行环境判断接下来要执行哪个分支的节点。
@@ -82,7 +83,6 @@ namespace Serein.Library.Core
}
}
-
///
/// 获取节点当前数据
///
@@ -128,7 +128,6 @@ namespace Serein.Library.Core
return null;
}
-
///
/// 结束流程
///
@@ -148,26 +147,15 @@ namespace Serein.Library.Core
}
}
- foreach (var nodeObj in ContextShareData.Values)
+ if (Tag != null && typeof(IDisposable).IsAssignableFrom(Tag?.GetType()) && Tag is IDisposable tagDisposable)
{
- if (nodeObj is null)
- {
- continue;
- }
- else
- {
- if (typeof(IDisposable).IsAssignableFrom(nodeObj?.GetType()) && nodeObj is IDisposable disposable)
- {
- disposable?.Dispose();
- }
- }
+ tagDisposable?.Dispose();
}
+ this.Tag = null;
this.dictNodeFlowData?.Clear();
- this.ContextShareData?.Clear();
RunState = RunState.Completion;
}
-
private void Dispose(ref IDictionary keyValuePairs)
{
foreach (var nodeObj in keyValuePairs.Values)
diff --git a/Library.Framework/DynamicContext.cs b/Library.Framework/DynamicContext.cs
index 72dffc8..bc29516 100644
--- a/Library.Framework/DynamicContext.cs
+++ b/Library.Framework/DynamicContext.cs
@@ -33,7 +33,8 @@ namespace Serein.Library.Framework.NodeFlow
///
/// 用来在当前流程上下文间传递数据
///
- public Dictionary ContextShareData { get; } = new Dictionary();
+ //public Dictionary ContextShareData { get; } = new Dictionary();
+ public object Tag { get; set; }
///
/// 当前节点执行完成后,设置该属性,让运行环境判断接下来要执行哪个分支的节点。
@@ -143,22 +144,13 @@ namespace Serein.Library.Framework.NodeFlow
}
}
}
- foreach (var nodeObj in ContextShareData.Values)
+
+ if (Tag != null && typeof(IDisposable).IsAssignableFrom(Tag?.GetType()) && Tag is IDisposable tagDisposable)
{
- if (nodeObj is null)
- {
- continue;
- }
- else
- {
- if (typeof(IDisposable).IsAssignableFrom(nodeObj?.GetType()) && nodeObj is IDisposable disposable)
- {
- disposable?.Dispose();
- }
- }
+ tagDisposable?.Dispose();
}
+ this.Tag = null;
this.dictNodeFlowData?.Clear();
- this.ContextShareData?.Clear();
RunState = RunState.Completion;
}
// public NodeRunCts NodeRunCts { get; set; }
diff --git a/Library/Api/IDynamicContext.cs b/Library/Api/IDynamicContext.cs
index e5fd86a..8efd5e4 100644
--- a/Library/Api/IDynamicContext.cs
+++ b/Library/Api/IDynamicContext.cs
@@ -24,7 +24,9 @@ namespace Serein.Library.Api
///
/// 用来在当前流程上下文间传递数据
///
- Dictionary ContextShareData { get; }
+ //Dictionary ContextShareData { get; }
+
+ object Tag { get; set; }
///
/// 下一个要执行的节点类别
diff --git a/Library/Api/IFlowEnvironment.cs b/Library/Api/IFlowEnvironment.cs
index ea2e96c..67108cd 100644
--- a/Library/Api/IFlowEnvironment.cs
+++ b/Library/Api/IFlowEnvironment.cs
@@ -89,8 +89,9 @@ namespace Serein.Library.Api
///
/// 远程环境内容输出
///
+ /// 输出的日志类别
/// 输出的文本信息
- public delegate void EnvOutHandler(string value);
+ public delegate void EnvOutHandler(InfoType type, string value);
#endregion
@@ -486,6 +487,7 @@ namespace Serein.Library.Api
public double Y { get; private set; }
}
+
#endregion
@@ -497,12 +499,16 @@ namespace Serein.Library.Api
public interface IFlowEnvironment
{
#region 属性
+
+
///
/// 单例模式IOC容器,内部维护了一个实例字典,默认使用类型的FullName作为Key,如果以“接口-实现类”的方式注册,那么将使用接口类型的FullName作为Key。
/// 当某个类型注册绑定成功后,将不会因为其它地方尝试注册相同类型的行为导致类型被重新创建。
///
ISereinIOC IOC { get; }
+
+
///
/// 环境名称
///
@@ -520,9 +526,9 @@ namespace Serein.Library.Api
bool IsControlRemoteEnv { get; }
///
- /// 是否运行在控制台上
+ /// 信息输出等级
///
- // bool IsRuningOnConsole { get; }
+ InfoClass InfoClass { get; set; }
///
/// 流程运行状态
@@ -626,13 +632,20 @@ namespace Serein.Library.Api
///
//
//
- void SetConsoleOut(); // Action output, Action clearMsg
+ ///void SetConsoleOut(); // Action output, Action clearMsg
///
- /// 使用JSON处理库输出对象信息
+ /// 输出信息
///
- ///
- void WriteLineObjToJson(object obj);
+ ///
+ ///
+ void WriteLine(InfoType type, string message, InfoClass @class = InfoClass.Trivial);
+
+ /////
+ ///// 使用JSON处理库输出对象信息
+ /////
+ /////
+ //void WriteLineObjToJson(object obj);
///
/// 启动远程服务
diff --git a/Library/Enums/InfoType.cs b/Library/Enums/InfoType.cs
new file mode 100644
index 0000000..a399116
--- /dev/null
+++ b/Library/Enums/InfoType.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Serein.Library
+{
+ ///
+ /// 信息输出等级
+ ///
+ public enum InfoClass
+ {
+ ///
+ /// 琐碎的
+ ///
+ Trivial,
+ ///
+ /// 一般的
+ ///
+ General,
+ ///
+ /// 重要的
+ ///
+ Important,
+ }
+
+
+ ///
+ /// 信息类别
+ ///
+ public enum InfoType
+ {
+ ///
+ /// 普通信息
+ ///
+ INFO,
+ ///
+ /// 错误信息(但不影响运行)
+ ///
+ WARN,
+ ///
+ /// 异常信息(影响了运行)
+ ///
+ ERROR,
+ }
+}
diff --git a/Library/FlowNode/NodeModelBaseData.cs b/Library/FlowNode/NodeModelBaseData.cs
index 976d107..4bacbcc 100644
--- a/Library/FlowNode/NodeModelBaseData.cs
+++ b/Library/FlowNode/NodeModelBaseData.cs
@@ -9,6 +9,8 @@ using System.Threading;
namespace Serein.Library
{
+
+
///
/// 节点基类(数据):条件控件,动作控件,条件区域,动作区域
///
diff --git a/Library/FlowNode/NodeModelBaseFunc.cs b/Library/FlowNode/NodeModelBaseFunc.cs
index aaba4c6..db75423 100644
--- a/Library/FlowNode/NodeModelBaseFunc.cs
+++ b/Library/FlowNode/NodeModelBaseFunc.cs
@@ -21,6 +21,8 @@ using static Serein.Library.Utils.ChannelFlowInterrupt;
namespace Serein.Library
{
+
+
///
/// 节点基类(数据):条件控件,动作控件,条件区域,动作区域
///
@@ -124,7 +126,8 @@ namespace Serein.Library
{
if(i >= pds.Length)
{
- Console.WriteLine($"保存的参数数量大于方法此时的入参参数数量:[{nodeInfo.Guid}][{nodeInfo.MethodName}]");
+ Env.WriteLine(InfoType.ERROR, $"保存的参数数量大于方法此时的入参参数数量:[{nodeInfo.Guid}][{nodeInfo.MethodName}]");
+
break;
}
var pd = pds[i];
@@ -269,9 +272,6 @@ namespace Serein.Library
#region 执行完成
-
-
-
// 首先将指定类别后继分支的所有节点逆序推入栈中
var nextNodes = currentNode.SuccessorNodes[context.NextOrientation];
for (int index = nextNodes.Count - 1; index >= 0; index--)
@@ -350,7 +350,6 @@ namespace Serein.Library
}
object[] parameters;
-
Array paramsArgs = null; // 初始化可选参数
int paramsArgIndex = 0; // 可选参数下标,与 object[] paramsArgs 一起使用
@@ -533,7 +532,8 @@ namespace Serein.Library
#region 对入参数据尝试进行转换
object tmpVaue = null; // 临时存放数据,最后才判断是否放置可选参数数组
- if (inputParameter.GetType() == argDataType)
+ var inputParameterType = inputParameter.GetType();
+ if (inputParameterType == argDataType)
{
tmpVaue = inputParameter; // 类型一致无需转换,直接装入入参数组
}
@@ -551,12 +551,12 @@ namespace Serein.Library
var valueStr = inputParameter?.ToString();
tmpVaue = valueStr;
}
- else if(argDataType.IsSubclassOf(inputParameter.GetType())) // 入参类型 是 预入参数据类型 的 子类/实现类
+ else if(argDataType.IsSubclassOf(inputParameterType)) // 入参类型 是 预入参数据类型 的 子类/实现类
{
// 方法入参中,父类不能隐式转为子类,这里需要进行强制转换
tmpVaue = ObjectConvertHelper.ConvertParentToChild(inputParameter, argDataType);
}
- else if(argDataType.IsAssignableFrom(inputParameter.GetType())) // 入参类型 是 预入参数据类型 的 父类/接口
+ else if(argDataType.IsAssignableFrom(inputParameterType)) // 入参类型 是 预入参数据类型 的 父类/接口
{
tmpVaue = inputParameter;
}
diff --git a/Library/FlowNode/ParameterDetails.cs b/Library/FlowNode/ParameterDetails.cs
index d92b483..870404f 100644
--- a/Library/FlowNode/ParameterDetails.cs
+++ b/Library/FlowNode/ParameterDetails.cs
@@ -195,68 +195,5 @@ namespace Serein.Library
- /////
- ///// 节点入参参数详情
- /////
-
- //public partial class TempParameterDetails
- //{
- // private readonly MethodDetails methodDetails;
-
- // ///
- // /// 参数索引
- // ///
- // public int Index { get; set; }
- // ///
- // /// 是否为显式参数(固定值/表达式)
- // ///
- // public bool IsExplicitData { get; set; }
- // ///
- // /// 转换器 IEnumConvertor<,>
- // ///
- // public Func