| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using TeamAAS.FlowEditor.Execution;
- using TeamAAS.FlowEditor.Models;
- using TeamAAS.FlowEditor.Plugins;
- using TeamAAS.FlowEngine.Execution;
- namespace TeamAAS.FlowEngine.Interfaces
- {
- /// <summary>
- /// 流程插件加载器接口:负责扫描、注册、实例化流程节点插件(<c>IFlowNodePlugin</c>),
- /// 并统一管理当前打开的所有流程 Tab,支撑执行器和组合模块的跨流程查询。
- /// </summary>
- public interface IPluginLoader
- {
- /// <summary>
- /// 当前插件目录是否已经加载过(防止重复扫描)。
- /// </summary>
- bool IsLoaded { get; }
- /// <summary>
- /// 所有已发现的插件描述(只读快照)。
- /// </summary>
- IReadOnlyList<PluginDescriptor> Descriptors { get; }
- /// <summary>
- /// 当前打开的所有流程 Tab(编辑器/执行器共用,可绑定到 UI)。
- /// </summary>
- ObservableCollection<FlowTabItem> FlowTabs { get; set; }
- /// <summary>
- /// 组合模块编辑时,记录当前子流程对应的组合模块 PluginModel,
- /// 公式编辑器据此区分「编辑子流程节点属性」和「编辑组合模块输出」场景。
- /// </summary>
- FlowGraph SetGroupPluginModel { get; set; }
- /// <summary>
- /// 组合模块编辑时,记录外层组合模块的 Model,用于 InputSourceDataProvider
- /// 查询主流程中组合模块的前置节点结果。
- /// </summary>
- BasePluginModel ParentGroupModel { get; set; }
- /// <summary>
- /// 当前在 PropertyGrid 中选中的节点(公式编辑器用它判断上下文)。
- /// </summary>
- FlowNode SelectFlow { get; set; }
- /// <summary>
- /// 从指定目录加载所有插件 DLL,并扫描 AppDomain 中已加载的程序集。
- /// 清理非插件 DLL/.pdb,避免目录脏乱。只在首次调用时执行。
- /// </summary>
- /// <param name="pluginsPath">插件目录路径(通常是 EXE 下的 Plugins)</param>
- void LoadFrom(string pluginsPath);
- /// <summary>
- /// 按显示名称创建插件实例(不带模型初始化)。找不到返回 null。
- /// </summary>
- IFlowNodePlugin CreateInstance(string displayName);
- /// <summary>
- /// 按显示名称获取插件描述信息(含 PluginType、Attribute 元数据)。找不到返回 null。
- /// </summary>
- PluginDescriptor GetDescriptor(string displayName);
- /// <summary>
- /// 获取所有已注册插件的 UI 展示信息(工具箱绑定用)。
- /// </summary>
- List<NodePluginInfo> GetAllPluginInfos();
- /// <summary>
- /// 获取单个插件的 UI 展示信息。找不到返回 null。
- /// </summary>
- NodePluginInfo GetPluginInfo(string displayName);
- /// <summary>
- /// 通过流程名称获取对应的 FlowTabItem(不存在返回 null)。
- /// </summary>
- FlowTabItem GetFlowTab(string flowName);
- /// <summary>
- /// 通过流程名称获取一个新的执行器(基于 FlowGraph 构造 FlowExecutor)。
- /// 流程或图不存在返回 null。
- /// </summary>
- FlowExecutor GetFlowExecutor(string flowName);
- /// <summary>
- /// 获取所有已打开流程的名称列表(用于下拉框、日志输出等)。
- /// </summary>
- List<string> GetFlowNames();
- /// <summary>
- /// 查找指定节点的首个后继节点插件实例(按连线先后顺序,只返回第一个)。
- /// 用于条件跳转、组合模块子流程等只取一条后继的场景。
- /// </summary>
- /// <param name="flowName">流程名称</param>
- /// <param name="nodeId">节点 NodeId</param>
- IFlowNodePlugin GetPluginTool(string flowName, string nodeId);
- /// <summary>
- /// 通过 FlowId + NodeId 获取所有后继节点列表。
- /// 自动在 FlowTabs 顶层图以及所有组合模块 SubGraph 中递归查找,
- /// 找不到目标图时返回空列表。
- /// </summary>
- /// <param name="flowId">目标图 GraphId(主流程或组合模块子流程皆可)</param>
- /// <param name="nodeId">起点节点 NodeId</param>
- List<FlowNode> IDGetNextPlugins(string flowId, string nodeId);
- }
- }
|