using Microsoft.Extensions.DependencyInjection; using Serein.Extend.NewtonsoftJson; using Serein.Library.Api; using Serein.Library.Utils; using Serein.NodeFlow.Env; using Serein.Workbench.Api; using Serein.Workbench.Services; using Serein.Workbench.ViewModels; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Threading; namespace Serein.Workbench { public static class ServiceCollectionExtensions { /// /// 注册ViewModel /// /// public static void AddViewModelServices(this IServiceCollection collection) { collection.AddSingleton(); // 视图模型路由 collection.AddSingleton(); collection.AddSingleton(); // 菜单栏视图模型 collection.AddSingleton(); // 工作台视图模型 collection.AddSingleton(); // 基础节点视图模型 collection.AddSingleton(); // 流程已加载依赖视图模型 collection.AddSingleton(); // 流程画布编辑器视图模型 collection.AddSingleton(); // 节点信息视图模型 collection.AddSingleton(); // 方法信息视图模型 collection.AddSingleton(); // 画布视图模型 collection.AddTransient(); // 画布 } public static void AddWorkbenchServices(this IServiceCollection collection) { collection.AddSingleton(); // 流程事件管理 collection.AddSingleton();// 按键事件管理 collection.AddSingleton(); // 流程事件管理 collection.AddSingleton(); // 项目管理 collection.AddSingleton(); // 节点操作管理 } /// /// 注册流程接口相关实例 /// /// public static void AddFlowServices(this IServiceCollection collection) { #region 创建实例 JsonHelper.UseJsonProvider(new NewtonsoftJsonProvider()); Func? getSyncContext = null; Dispatcher.CurrentDispatcher.Invoke(() => { var uiContext = SynchronizationContext.Current; // 在UI线程上获取UI线程上下文信息 if (uiContext is not null) { getSyncContext = () => uiContext; } }); UIContextOperation? uIContextOperation = new (getSyncContext); // 封装一个调用UI线程的工具类 IFlowEnvironment flowEnvironment = new FlowEnvironment(); flowEnvironment.SetUIContextOperation(uIContextOperation); collection.AddSingleton(uIContextOperation); // 注册UI线程操作上下文 collection.AddSingleton(flowEnvironment); // 注册运行环境 collection.AddSingleton(flowEnvironment.Event); // 注册运行环境事件 #endregion } } }