优化了运行环境与启动器的运行逻辑,以及IOC容器的注册/绑定/获取对象的机制

This commit is contained in:
fengjiayi
2024-09-16 21:38:34 +08:00
parent bcbf6cb992
commit e20855a076
13 changed files with 551 additions and 970 deletions

View File

@@ -45,65 +45,45 @@ namespace Serein.WorkBench
/// </summary>
public partial class MainWindow : Window
{
/// <summary>
/// 一种轻量的IOC容器
/// </summary>
private SereinIoc ServiceContainer { get; } = new SereinIoc();
/// <summary>
/// 全局捕获Console输出事件打印在这个窗体里面
/// </summary>
private readonly LogWindow logWindow;
/// <summary>
/// 存储加载的程序集
/// </summary>
// private readonly List<Assembly> loadedAssemblies = [];
/// <summary>
/// 存储加载的程序集路径
/// </summary>
// private readonly List<string> loadedAssemblyPaths = [];
/// <summary>
/// 存储所有方法信息
/// </summary>
// private static ConcurrentDictionary<string, MethodDetails> DllMethodDetails { get; } = [];
/// <summary>
/// 存储所有与节点有关的控件
/// </summary>
private readonly Dictionary<string, NodeControlBase> NodeControls = [];
/// <summary>
/// 存储所有的连接
/// </summary>
private readonly List<Connection> Connections = [];
/// <summary>
/// 存放触发器节点(运行时全部调用)
/// </summary>
// private readonly List<SingleFlipflopNode> flipflopNodes = [];
/// <summary>
/// 节点的命名空间
/// </summary>
public const string NodeSpaceName = $"{nameof(Serein)}.{nameof(Serein.NodeFlow)}.{nameof(Serein.NodeFlow.Model)}";
/// <summary>
/// 流程运行环境
/// </summary>
private IFlowEnvironment FlowEnvironment;
private IFlowEnvironment FlowEnvironment { get; }
private MainWindowViewModel ViewModel { get; set; }
/// <summary>
/// 流程启动器
/// 存储所有与节点有关的控件
/// </summary>
// private FlowStarter nodeFlowStarter;
private Dictionary<string, NodeControlBase> NodeControls { get; } = [];
/// <summary>
/// 存储所有的连接
/// </summary>
private List<Connection> Connections { get; } = [];
#region
/// <summary>
/// 当前选取的控件
/// </summary>
private readonly List<NodeControlBase> selectControls = [];
/// <summary>
/// 拖动创建节点控件时的鼠标位置
/// </summary>
private Point canvasDropPosition;
/// <summary>
/// 记录拖动开始时的鼠标位置
/// </summary>
@@ -154,20 +134,14 @@ namespace Serein.WorkBench
private TranslateTransform translateTransform;
#endregion
private Point canvasDropPosition;
// private MainWindowViewModel mainWindowViewModel { get; }
public MainWindow()
{
// mainWindowViewModel = new MainWindowViewModel(this);
InitializeComponent();
ViewModel = new MainWindowViewModel(this);
FlowEnvironment = ViewModel.FlowEnvironment;
InitializeComponent();
logWindow = new LogWindow();
logWindow.Show();
// 重定向 Console 输出
var logTextWriter = new LogTextWriter(WriteLog);
Console.SetOut(logTextWriter);
@@ -177,7 +151,6 @@ namespace Serein.WorkBench
private void InitFlowEvent()
{
FlowEnvironment = new FlowEnvironment();
FlowEnvironment.OnDllLoad += FlowEnvironment_DllLoadEvent;
FlowEnvironment.OnLoadNode += FlowEnvironment_NodeLoadEvent;
FlowEnvironment.OnStartNodeChange += FlowEnvironment_StartNodeChangeEvent;
@@ -188,8 +161,6 @@ namespace Serein.WorkBench
}
private void InitUI()
{
canvasTransformGroup = new TransformGroup();
@@ -226,7 +197,6 @@ namespace Serein.WorkBench
WriteLog("-------运行完成---------\r\n");
}
/// <summary>
/// 加载了DLL文件dll内容
/// </summary>
@@ -287,23 +257,8 @@ namespace Serein.WorkBench
NodeControls.TryAdd(nodeInfo.Guid, nodeControl); // 存放对应的控件
PlaceNodeOnCanvas(nodeControl, nodeInfo.Position.X, nodeInfo.Position.Y); // 配置节点,并放置在画布上
// 添加到画布
//FlowChartCanvas.Dispatcher.Invoke(() =>
//{
// // 添加控件到画布
// FlowChartCanvas.Children.Add(nodeControl);
// Canvas.SetLeft(nodeControl, nodeInfo.Position.x);
// Canvas.SetTop(nodeControl, nodeInfo.Position.y);
// nodeControls.TryAdd(nodeInfo.Guid, nodeControl); // 存放对应的控件
// ConfigureContextMenu(nodeControl); // 配置节点右键菜单
// ConfigureNodeEvents(nodeControl); // 配置节点事件
//});
}
/// <summary>
/// 节点连接关系变更
/// </summary>
@@ -319,7 +274,7 @@ namespace Serein.WorkBench
return;
}
ConnectionType connectionType = eventArgs.ConnectionType;
if(eventArgs.ChangeType == NodeConnectChangeEventArgs.ChangeTypeEnum.Create)
if(eventArgs.ChangeType == NodeConnectChangeEventArgs.ConnectChangeType.Create)
{
// 添加连接
var connection = new Connection
@@ -334,7 +289,7 @@ namespace Serein.WorkBench
Connections.Add(connection);
EndConnection();
}
else if (eventArgs.ChangeType == NodeConnectChangeEventArgs.ChangeTypeEnum.Remote)
else if (eventArgs.ChangeType == NodeConnectChangeEventArgs.ConnectChangeType.Remote)
{
// 需要移除连接
var removeConnections = Connections.Where(c => c.Start.ViewModel.Node.Guid.Equals(fromNodeGuid)
@@ -1403,7 +1358,7 @@ namespace Serein.WorkBench
/// <param name="e"></param>
private void ButtonDebugFlipflopNode_Click(object sender, RoutedEventArgs e)
{
FlowEnvironment.Exit();
FlowEnvironment.Exit(); // 在运行平台上点击了退出
}
/// <summary>