对象预览器支持了值类型集合成员的简单预览

This commit is contained in:
fengjiayi
2024-09-24 22:39:43 +08:00
parent 8a502b77d4
commit 06f6d2f34b
28 changed files with 1674 additions and 859 deletions

View File

@@ -4,10 +4,23 @@ using System.Threading.Tasks;
namespace Serein.Library.Api
{
/// <summary>
/// 流程上下文
/// </summary>
public interface IDynamicContext
{
IFlowEnvironment FlowEnvironment { get; }
ISereinIOC SereinIoc { get; }
Task CreateTimingTask(Action action, int time = 100, int count = -1);
/// <summary>
/// 运行环境
/// </summary>
IFlowEnvironment Env { get; }
/// <summary>
/// 定时循环触发
/// </summary>
/// <param name="callback"></param>
/// <param name="time"></param>
/// <param name="count"></param>
/// <returns></returns>
Task CreateTimingTask(Action callback, int time = 100, int count = -1);
}
}

View File

@@ -47,6 +47,26 @@ namespace Serein.Library.Api
/// </summary>
/// <param name="eventArgs"></param>
public delegate void StartNodeChangeHandler(StartNodeChangeEventArgs eventArgs);
/// <summary>
/// 被监视的对象改变事件
/// </summary>
/// <param name="eventArgs"></param>
public delegate void MonitorObjectChangeHandler(MonitorObjectEventArgs eventArgs);
/// <summary>
/// 节点中断状态改变事件(开启了中断/取消了中断)
/// </summary>
/// <param name="eventArgs"></param>
public delegate void NodeInterruptStateChangeHandler(NodeInterruptStateChangeEventArgs eventArgs);
/// <summary>
/// 节点触发中断事件
/// </summary>
/// <param name="eventArgs"></param>
public delegate void ExpInterruptTriggerHandler(InterruptTriggerEventArgs eventArgs);
#endregion
#region
@@ -210,45 +230,35 @@ namespace Serein.Library.Api
/// </summary>
public string NewNodeGuid { get; private set; }
}
#endregion
/// <summary>
/// 被监视的对象改变事件
/// </summary>
/// <param name="eventArgs"></param>
public delegate void MonitorObjectChangeHandler(MonitorObjectEventArgs eventArgs);
/// <summary>
/// 节点中断状态改变事件(开启了中断/取消了中断)
/// </summary>
/// <param name="eventArgs"></param>
public delegate void NodeInterruptStateChangeHandler(NodeInterruptStateChangeEventArgs eventArgs);
/// <summary>
/// 节点触发中断事件
/// </summary>
/// <param name="eventArgs"></param>
public delegate void ExpInterruptTriggerHandler(InterruptTriggerEventArgs eventArgs);
/// <summary>
/// 监视的节点数据发生变化
/// </summary>
public class MonitorObjectEventArgs : FlowEventArgs
{
public MonitorObjectEventArgs(string nodeGuid,object newData)
public enum ObjSourceType
{
NodeFlowData,
IOCObj,
}
public MonitorObjectEventArgs(string nodeGuid, object monitorData, ObjSourceType objSourceType)
{
NodeGuid = nodeGuid;
NewData = newData;
NewData = monitorData;
ObjSource = objSourceType;
}
/// <summary>
/// 中断的节点Guid
/// </summary>
public string NodeGuid { get; protected set; }
public ObjSourceType ObjSource { get; protected set; }
/// <summary>
/// 新的数据
/// </summary>
public object NewData { get; protected set; }
public object NewData { get; protected set; }
}
/// <summary>
@@ -256,7 +266,7 @@ namespace Serein.Library.Api
/// </summary>
public class NodeInterruptStateChangeEventArgs : FlowEventArgs
{
public NodeInterruptStateChangeEventArgs(string nodeGuid,InterruptClass @class)
public NodeInterruptStateChangeEventArgs(string nodeGuid, InterruptClass @class)
{
NodeGuid = nodeGuid;
Class = @class;
@@ -283,6 +293,10 @@ namespace Serein.Library.Api
/// 表达式中断
/// </summary>
Exp,
/// <summary>
/// 对象监视中断
/// </summary>
Obj,
}
public InterruptTriggerEventArgs(string nodeGuid, string expression, InterruptTriggerType type)
@@ -299,26 +313,62 @@ namespace Serein.Library.Api
public string Expression { get; protected set; }
public InterruptTriggerType Type { get; protected set; }
}
#endregion
/// <summary>
/// IOC容器发生变化
/// </summary>
public delegate void IOCMembersChangedHandler();
/// <summary>
/// 流程事件签名基类
/// </summary>
public class IOCMembersChangedEventArgs : FlowEventArgs
{
public enum EventType
{
/// <summary>
/// 登记了类型
/// </summary>
Registered,
/// <summary>
/// 构建了类型
/// </summary>
Completeuild,
}
public IOCMembersChangedEventArgs(Type[] types, object[] dependencies, object[] unfinishedDependencies)
{
this.Types = types;
this.Dependencies = dependencies;
this.UnfinishedDependencies = unfinishedDependencies;
}
public Type[] Types { get; protected set; }
public object[] Dependencies { get; private set; }
public object[] UnfinishedDependencies { get; private set; }
}
public interface IFlowEnvironment
{
#region
/// <summary>
/// IOC容器
/// </summary>
ISereinIOC IOC { get; }
/// <summary>
/// 环境名称
/// </summary>
string EnvName {get;}
string EnvName { get; }
/// <summary>
/// 是否全局中断
/// </summary>
bool IsGlobalInterrupt { get; }
/// <summary>
/// 设置中断时的中断级别
/// </summary>
//InterruptClass EnvInterruptClass { get; set; }
bool IsGlobalInterrupt { get; }
#endregion
/// <summary>
/// 调试管理
/// </summary>
//ChannelFlowInterrupt ChannelFlowInterrupt { get; set; }
#region
/// <summary>
/// 加载Dll
@@ -371,6 +421,10 @@ namespace Serein.Library.Api
event ExpInterruptTriggerHandler OnInterruptTrigger;
#endregion
#region Workbench
/// <summary>
/// 保存当前项目
/// </summary>
@@ -397,13 +451,20 @@ namespace Serein.Library.Api
/// <param name="name"></param>
/// <param name="md"></param>
/// <returns></returns>
bool TryGetMethodDetails(string methodName,out MethodDetails md);
bool TryGetMethodDetails(string methodName, out MethodDetails md);
/// <summary>
/// 开始运行
/// </summary>
Task StartAsync();
/// <summary>
/// 从选定的节点开始运行
/// </summary>
/// <param name="startNodeGuid"></param>
/// <returns></returns>
Task StartFlowInSelectNodeAsync(string startNodeGuid);
/// <summary>
/// 结束运行
/// </summary>
@@ -442,7 +503,6 @@ namespace Serein.Library.Api
/// <param name="nodeGuid">待移除的节点Guid</param>
void RemoteNode(string nodeGuid);
/// <summary>
/// 设置节点中断级别
/// </summary>
@@ -452,38 +512,42 @@ namespace Serein.Library.Api
bool SetNodeInterrupt(string nodeGuid, InterruptClass interruptClass);
/// <summary>
/// 添加中断表达式
/// 添加作用于某个对象的中断表达式
/// </summary>
/// <param name="nodeGuid"></param>
/// <param name="expression"></param>
/// <returns></returns>
bool AddInterruptExpression(string nodeGuid,string expression);
bool AddInterruptExpression(object obj, string expression);
/// <summary>
/// 添加作用于指定节点的中断表达式
/// </summary>
/// <param name="nodeGuid"></param>
/// <param name="expression"></param>
/// <returns></returns>
// bool AddInterruptExpression(string nodeGuid,string expression);
// <summary>
// 设置节点数据监视状态
// </summary>
// <param name="nodeGuid">需要监视的节点Guid</param>
// <param name="isMonitor">是否监视</param>
// void SetNodeFLowDataMonitorState(string nodeGuid, bool isMonitor);
/// <summary>
/// 设置节点数据监视状态
/// 监视指定对象
/// </summary>
/// <param name="nodeGuid">需要监视的节点Guid</param>
/// <param name="isMonitor">是否监视</param>
void SetNodeFLowDataMonitorState(string nodeGuid, bool isMonitor);
/// <param name="obj">需要监视的对象</param>
/// <param name="isMonitor">是否启用监视</param>
void SetMonitorObjState(object obj, bool isMonitor);
/// <summary>
/// 流程启动器调用,节点数据更新通知
/// 检查一个对象是否处于监听状态如果是则传出与该对象相关的表达式用于中断如果不是则返回false。
/// </summary>
/// <param name="nodeGuid">更新了数据的节点Guid</param>
/// <param name="flowData">更新的数据</param>
void FlowDataNotification(string nodeGuid, object flowData);
/// <param name="obj">判断的对象</param>
/// <param name="exps">表达式</param>
/// <returns></returns>
bool CheckObjMonitorState(object obj, out List<string> exps);
/// <summary>
/// 流程启动器调用,节点触发了中断
/// </summary>
/// <param name="nodeGuid">被中断的节点Guid</param>
/// <param name="expression">被触发的表达式</param>
/// <param name="type">中断类型。0主动监视1表达式</param>
void TriggerInterrupt(string nodeGuid,string expression, InterruptTriggerEventArgs.InterruptTriggerType type);
/// <summary>
/// 全局中断
@@ -494,6 +558,26 @@ namespace Serein.Library.Api
Task<CancelType> GetOrCreateGlobalInterruptAsync();
#endregion
#region Start
/// <summary>
/// 流程启动器调用,监视数据更新通知
/// </summary>
/// <param name="nodeGuid">更新了数据的节点Guid</param>
/// <param name="flowData">更新的数据</param>
void MonitorObjectNotification(string nodeGuid, object monitorData, MonitorObjectEventArgs.ObjSourceType sourceType);
/// <summary>
/// 流程启动器调用,节点触发了中断
/// </summary>
/// <param name="nodeGuid">被中断的节点Guid</param>
/// <param name="expression">被触发的表达式</param>
/// <param name="type">中断类型。0主动监视1表达式</param>
void TriggerInterrupt(string nodeGuid, string expression, InterruptTriggerEventArgs.InterruptTriggerType type);
#endregion
}
}

View File

@@ -15,31 +15,63 @@ namespace Serein.Library.Api
/// 注册实例
/// </summary>
ISereinIOC Register(Type type, params object[] parameters);
/// <summary>
/// 注册实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="parameters"></param>
/// <returns></returns>
ISereinIOC Register<T>(params object[] parameters);
/// <summary>
/// 注册接口的实例
/// </summary>
/// <typeparam name="TService"></typeparam>
/// <typeparam name="TImplementation"></typeparam>
/// <param name="parameters"></param>
/// <returns></returns>
ISereinIOC Register<TService, TImplementation>(params object[] parameters) where TImplementation : TService;
/// <summary>
/// 获取或创建并注入目标类型
/// 获取或创建并注入目标类型会记录到IOC容器中。
/// </summary>
T GetOrRegisterInstantiate<T>();
/// <summary>
/// 获取或创建并注入目标类型
/// 获取或创建并注入目标类型会记录到IOC容器中。
/// </summary>
object GetOrRegisterInstantiate(Type type);
/// <summary>
/// 获取类型的实例
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
object Get(Type type);
T Get<T>(string name);
object Get(string name);
void CustomRegisterInstance(string name, object instance, bool needInjectProperty = true);
ISereinIOC Run<T>(string name, Action<T> action);
/// <summary>
/// 获取指定名称的实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
T Get<T>(string key);
/// <summary>
/// 创建目标类型的对象, 并注入依赖项
/// 通过名称注册实例
/// </summary>
/// <param name="key">注入名称</param>
/// <param name="instance">实例对象</param>
/// <param name="needInjectProperty">是否需要注入依赖项</param>
void CustomRegisterInstance(string key, object instance, bool needInjectProperty = true);
/// <summary>
/// 用于临时实例的创建不注册到IOC容器中依赖项注入失败时也不记录。
/// </summary>
object Instantiate(Type type, params object[] parameters);
/// <summary>
/// 实例化注册的类型,并注入依赖项
/// </summary>
/// <returns></returns>
ISereinIOC Build();
ISereinIOC Run<T>(Action<T> action);
ISereinIOC Run<T1, T2>(Action<T1, T2> action);
ISereinIOC Run<T1, T2, T3>(Action<T1, T2, T3> action);