From f15baf0d9bb5b8ca1883eacdc81871cb4bde365a Mon Sep 17 00:00:00 2001 From: fengjiayi <12821976+ning_xi@user.noreply.gitee.com> Date: Tue, 6 Aug 2024 15:41:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E6=95=B4=E5=90=88=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E4=BB=A3=E7=A0=81=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Library/{DynamicFlow => Flow}/Api.cs | 2 +- Library/{DynamicFlow => Flow}/Attribute.cs | 2 +- .../{DynamicFlow => Flow}/DynamicContext.cs | 3 +- .../{DynamicFlow => Flow}/MethodDetails.cs | 2 +- .../{DynamicFlow => Flow}/NodeFlowStarter.cs | 16 +- .../NodeModel/CompositeActionNode.cs | 4 +- .../NodeModel/CompositeConditionNode.cs | 4 +- .../NodeModel/CompositeLoopNode.cs | 2 +- .../NodeModel/NodeBase.cs | 6 +- .../NodeModel/SingleActionNode.cs | 4 +- .../NodeModel/SingleConditionNode.cs | 6 +- .../NodeModel/SingleExpOpNode.cs | 4 +- .../NodeModel/SingleFlipflopNode.cs | 4 +- .../SerinExpression/ConditionResolver.cs | 2 +- .../SerinExpression/SerinConditionParser.cs | 2 +- .../SerinExpressionEvaluator.cs | 4 +- .../Tool/DelegateGenerator.cs | 7 +- .../{DynamicFlow => Flow}/Tool/DynamicTool.cs | 2 +- .../Tool/ExpressionHelper.cs | 2 +- .../{DynamicFlow => Flow}/Tool/TcsSignal.cs | 2 +- .../Tool/TypeDefinition.cs | 4 +- Library/{Web => Http}/Attribute.cs | 2 +- Library/{Web => Http}/ControllerBase.cs | 2 +- Library/{Web => Http}/Router.cs | 8 +- Library/{Web => Http}/WebAPIAttribute.cs | 5 +- Library/IOC/ServiceContainer.cs | 413 ++++++++++ Library/Serein.Library.csproj | 8 + Library/ServiceContainer.cs | 758 +++++++++--------- MyDll/SampleCondition.cs | 11 +- SereinWAT/SereinWAT.cs | 5 +- WorkBench/App.xaml.cs | 2 +- WorkBench/MainWindow.xaml.cs | 34 +- WorkBench/Node/View/ActionNodeControl.xaml.cs | 2 +- .../Node/View/ActionRegionControl.xaml.cs | 2 +- .../Node/View/ConditionNodeControl.xaml.cs | 4 +- .../Node/View/ConditionRegionControl.xaml.cs | 4 +- WorkBench/Node/View/DllControlControl.xaml.cs | 2 +- WorkBench/Node/View/ExpOpNodeControl.xaml.cs | 2 +- .../Node/View/FlipflopNodeControl.xaml.cs | 4 +- WorkBench/Node/View/NodeControlBase.cs | 4 +- .../ViewModel/ActionNodeControlViewModel.cs | 4 +- .../ConditionNodeControlViewModel.cs | 4 +- .../Node/ViewModel/ExpOpNodeViewModel.cs | 2 +- .../ViewModel/FlipflopNodeControlViewModel.cs | 2 +- WorkBench/Themes/MethodDetailsControl.xaml.cs | 2 +- 45 files changed, 886 insertions(+), 484 deletions(-) rename Library/{DynamicFlow => Flow}/Api.cs (85%) rename Library/{DynamicFlow => Flow}/Attribute.cs (98%) rename Library/{DynamicFlow => Flow}/DynamicContext.cs (98%) rename Library/{DynamicFlow => Flow}/MethodDetails.cs (99%) rename Library/{DynamicFlow => Flow}/NodeFlowStarter.cs (95%) rename Library/{DynamicFlow => Flow}/NodeModel/CompositeActionNode.cs (95%) rename Library/{DynamicFlow => Flow}/NodeModel/CompositeConditionNode.cs (96%) rename Library/{DynamicFlow => Flow}/NodeModel/CompositeLoopNode.cs (82%) rename Library/{DynamicFlow => Flow}/NodeModel/NodeBase.cs (99%) rename Library/{DynamicFlow => Flow}/NodeModel/SingleActionNode.cs (96%) rename Library/{DynamicFlow => Flow}/NodeModel/SingleConditionNode.cs (94%) rename Library/{DynamicFlow => Flow}/NodeModel/SingleExpOpNode.cs (91%) rename Library/{DynamicFlow => Flow}/NodeModel/SingleFlipflopNode.cs (95%) rename Library/{DynamicFlow => Flow}/SerinExpression/ConditionResolver.cs (99%) rename Library/{DynamicFlow => Flow}/SerinExpression/SerinConditionParser.cs (99%) rename Library/{DynamicFlow => Flow}/SerinExpression/SerinExpressionEvaluator.cs (98%) rename Library/{DynamicFlow => Flow}/Tool/DelegateGenerator.cs (98%) rename Library/{DynamicFlow => Flow}/Tool/DynamicTool.cs (99%) rename Library/{DynamicFlow => Flow}/Tool/ExpressionHelper.cs (99%) rename Library/{DynamicFlow => Flow}/Tool/TcsSignal.cs (98%) rename Library/{DynamicFlow => Flow}/Tool/TypeDefinition.cs (94%) rename Library/{Web => Http}/Attribute.cs (99%) rename Library/{Web => Http}/ControllerBase.cs (92%) rename Library/{Web => Http}/Router.cs (99%) rename Library/{Web => Http}/WebAPIAttribute.cs (98%) create mode 100644 Library/IOC/ServiceContainer.cs diff --git a/Library/DynamicFlow/Api.cs b/Library/Flow/Api.cs similarity index 85% rename from Library/DynamicFlow/Api.cs rename to Library/Flow/Api.cs index a723376..a62632a 100644 --- a/Library/DynamicFlow/Api.cs +++ b/Library/Flow/Api.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Serein.DynamicFlow +namespace Serein.Flow { public interface IDynamicFlowNode { diff --git a/Library/DynamicFlow/Attribute.cs b/Library/Flow/Attribute.cs similarity index 98% rename from Library/DynamicFlow/Attribute.cs rename to Library/Flow/Attribute.cs index 4ed8556..942f11d 100644 --- a/Library/DynamicFlow/Attribute.cs +++ b/Library/Flow/Attribute.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Serein.DynamicFlow +namespace Serein.Flow { public enum DynamicNodeType diff --git a/Library/DynamicFlow/DynamicContext.cs b/Library/Flow/DynamicContext.cs similarity index 98% rename from Library/DynamicFlow/DynamicContext.cs rename to Library/Flow/DynamicContext.cs index eee62b7..a0bb924 100644 --- a/Library/DynamicFlow/DynamicContext.cs +++ b/Library/Flow/DynamicContext.cs @@ -1,4 +1,5 @@ using DynamicDemo.Node; +using Serein.Library.IOC; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -9,7 +10,7 @@ using System.Threading.Tasks; using static System.Collections.Specialized.BitVector32; using static System.Runtime.InteropServices.JavaScript.JSType; -namespace Serein.DynamicFlow +namespace Serein.Flow { public enum FfState diff --git a/Library/DynamicFlow/MethodDetails.cs b/Library/Flow/MethodDetails.cs similarity index 99% rename from Library/DynamicFlow/MethodDetails.cs rename to Library/Flow/MethodDetails.cs index b766f19..dd62b99 100644 --- a/Library/DynamicFlow/MethodDetails.cs +++ b/Library/Flow/MethodDetails.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using static Dm.net.buffer.ByteArrayBuffer; -namespace Serein.DynamicFlow +namespace Serein.Flow { /// /// 显式参数 diff --git a/Library/DynamicFlow/NodeFlowStarter.cs b/Library/Flow/NodeFlowStarter.cs similarity index 95% rename from Library/DynamicFlow/NodeFlowStarter.cs rename to Library/Flow/NodeFlowStarter.cs index 6de1ba9..83cc335 100644 --- a/Library/DynamicFlow/NodeFlowStarter.cs +++ b/Library/Flow/NodeFlowStarter.cs @@ -1,15 +1,9 @@ -using Serein; -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; -using Serein.DynamicFlow.Tool; -using Serein.Web; +using Serein.Flow; +using Serein.Flow.NodeModel; +using Serein.Flow.Tool; +using Serein.Library.Http; +using Serein.Library.IOC; using SqlSugar; -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; namespace DynamicDemo.Node { diff --git a/Library/DynamicFlow/NodeModel/CompositeActionNode.cs b/Library/Flow/NodeModel/CompositeActionNode.cs similarity index 95% rename from Library/DynamicFlow/NodeModel/CompositeActionNode.cs rename to Library/Flow/NodeModel/CompositeActionNode.cs index 2e2295f..4ca9e61 100644 --- a/Library/DynamicFlow/NodeModel/CompositeActionNode.cs +++ b/Library/Flow/NodeModel/CompositeActionNode.cs @@ -1,8 +1,8 @@ -using Serein.DynamicFlow; +using Serein.Flow; using System.Collections.Generic; using System.Diagnostics; -namespace Serein.DynamicFlow.NodeModel +namespace Serein.Flow.NodeModel { /// diff --git a/Library/DynamicFlow/NodeModel/CompositeConditionNode.cs b/Library/Flow/NodeModel/CompositeConditionNode.cs similarity index 96% rename from Library/DynamicFlow/NodeModel/CompositeConditionNode.cs rename to Library/Flow/NodeModel/CompositeConditionNode.cs index 2d9145e..0095abd 100644 --- a/Library/DynamicFlow/NodeModel/CompositeConditionNode.cs +++ b/Library/Flow/NodeModel/CompositeConditionNode.cs @@ -1,9 +1,9 @@ -using Serein.DynamicFlow.Tool; +using Serein.Flow.Tool; using System; using System.Collections.Generic; using System.Diagnostics; -namespace Serein.DynamicFlow.NodeModel +namespace Serein.Flow.NodeModel { /// diff --git a/Library/DynamicFlow/NodeModel/CompositeLoopNode.cs b/Library/Flow/NodeModel/CompositeLoopNode.cs similarity index 82% rename from Library/DynamicFlow/NodeModel/CompositeLoopNode.cs rename to Library/Flow/NodeModel/CompositeLoopNode.cs index 728abc0..649c71d 100644 --- a/Library/DynamicFlow/NodeModel/CompositeLoopNode.cs +++ b/Library/Flow/NodeModel/CompositeLoopNode.cs @@ -4,7 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Serein.DynamicFlow.NodeModel +namespace Serein.Flow.NodeModel { public class CompositeLoopNode : NodeBase { diff --git a/Library/DynamicFlow/NodeModel/NodeBase.cs b/Library/Flow/NodeModel/NodeBase.cs similarity index 99% rename from Library/DynamicFlow/NodeModel/NodeBase.cs rename to Library/Flow/NodeModel/NodeBase.cs index f519a5f..bc9e0c1 100644 --- a/Library/DynamicFlow/NodeModel/NodeBase.cs +++ b/Library/Flow/NodeModel/NodeBase.cs @@ -1,5 +1,5 @@ -using Serein.DynamicFlow; -using Serein.DynamicFlow.Tool; +using Serein.Flow; +using Serein.Flow.Tool; using Newtonsoft.Json; using SqlSugar; using System; @@ -8,7 +8,7 @@ using System.Threading; using System.Collections.Generic; using System.Linq; -namespace Serein.DynamicFlow.NodeModel +namespace Serein.Flow.NodeModel { public enum ConnectionType diff --git a/Library/DynamicFlow/NodeModel/SingleActionNode.cs b/Library/Flow/NodeModel/SingleActionNode.cs similarity index 96% rename from Library/DynamicFlow/NodeModel/SingleActionNode.cs rename to Library/Flow/NodeModel/SingleActionNode.cs index 6b5694d..867ff33 100644 --- a/Library/DynamicFlow/NodeModel/SingleActionNode.cs +++ b/Library/Flow/NodeModel/SingleActionNode.cs @@ -1,7 +1,7 @@ -using Serein.DynamicFlow.Tool; +using Serein.Flow.Tool; using System.Diagnostics; -namespace Serein.DynamicFlow.NodeModel +namespace Serein.Flow.NodeModel { /// /// 单动作节点(用于动作控件) diff --git a/Library/DynamicFlow/NodeModel/SingleConditionNode.cs b/Library/Flow/NodeModel/SingleConditionNode.cs similarity index 94% rename from Library/DynamicFlow/NodeModel/SingleConditionNode.cs rename to Library/Flow/NodeModel/SingleConditionNode.cs index 060c7c3..50a72fc 100644 --- a/Library/DynamicFlow/NodeModel/SingleConditionNode.cs +++ b/Library/Flow/NodeModel/SingleConditionNode.cs @@ -1,10 +1,10 @@ -using Serein.DynamicFlow.SerinExpression; -using Serein.DynamicFlow.Tool; +using Serein.Flow.SerinExpression; +using Serein.Flow.Tool; using System; using System.Diagnostics; using System.Linq.Expressions; -namespace Serein.DynamicFlow.NodeModel +namespace Serein.Flow.NodeModel { /// /// 条件节点(用于条件控件) diff --git a/Library/DynamicFlow/NodeModel/SingleExpOpNode.cs b/Library/Flow/NodeModel/SingleExpOpNode.cs similarity index 91% rename from Library/DynamicFlow/NodeModel/SingleExpOpNode.cs rename to Library/Flow/NodeModel/SingleExpOpNode.cs index 6cc3ac6..58b5866 100644 --- a/Library/DynamicFlow/NodeModel/SingleExpOpNode.cs +++ b/Library/Flow/NodeModel/SingleExpOpNode.cs @@ -1,11 +1,11 @@ -using Serein.DynamicFlow.SerinExpression; +using Serein.Flow.SerinExpression; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Serein.DynamicFlow.NodeModel +namespace Serein.Flow.NodeModel { /// /// Expression Operation - 表达式操作 diff --git a/Library/DynamicFlow/NodeModel/SingleFlipflopNode.cs b/Library/Flow/NodeModel/SingleFlipflopNode.cs similarity index 95% rename from Library/DynamicFlow/NodeModel/SingleFlipflopNode.cs rename to Library/Flow/NodeModel/SingleFlipflopNode.cs index ca7751f..8292034 100644 --- a/Library/DynamicFlow/NodeModel/SingleFlipflopNode.cs +++ b/Library/Flow/NodeModel/SingleFlipflopNode.cs @@ -1,6 +1,6 @@ -using Serein.DynamicFlow.Tool; +using Serein.Flow.Tool; -namespace Serein.DynamicFlow.NodeModel +namespace Serein.Flow.NodeModel { public class SingleFlipflopNode : NodeBase diff --git a/Library/DynamicFlow/SerinExpression/ConditionResolver.cs b/Library/Flow/SerinExpression/ConditionResolver.cs similarity index 99% rename from Library/DynamicFlow/SerinExpression/ConditionResolver.cs rename to Library/Flow/SerinExpression/ConditionResolver.cs index 72b8990..126a960 100644 --- a/Library/DynamicFlow/SerinExpression/ConditionResolver.cs +++ b/Library/Flow/SerinExpression/ConditionResolver.cs @@ -2,7 +2,7 @@ using System.Reflection; using System.Runtime.InteropServices; -namespace Serein.DynamicFlow.SerinExpression +namespace Serein.Flow.SerinExpression { public abstract class ConditionResolver diff --git a/Library/DynamicFlow/SerinExpression/SerinConditionParser.cs b/Library/Flow/SerinExpression/SerinConditionParser.cs similarity index 99% rename from Library/DynamicFlow/SerinExpression/SerinConditionParser.cs rename to Library/Flow/SerinExpression/SerinConditionParser.cs index a1565df..64055b3 100644 --- a/Library/DynamicFlow/SerinExpression/SerinConditionParser.cs +++ b/Library/Flow/SerinExpression/SerinConditionParser.cs @@ -3,7 +3,7 @@ using System.Globalization; using System.Linq; using System.Reflection; -namespace Serein.DynamicFlow.SerinExpression; +namespace Serein.Flow.SerinExpression; public class SerinConditionParser { diff --git a/Library/DynamicFlow/SerinExpression/SerinExpressionEvaluator.cs b/Library/Flow/SerinExpression/SerinExpressionEvaluator.cs similarity index 98% rename from Library/DynamicFlow/SerinExpression/SerinExpressionEvaluator.cs rename to Library/Flow/SerinExpression/SerinExpressionEvaluator.cs index 9cc364f..0992665 100644 --- a/Library/DynamicFlow/SerinExpression/SerinExpressionEvaluator.cs +++ b/Library/Flow/SerinExpression/SerinExpressionEvaluator.cs @@ -4,10 +4,10 @@ using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; -using static Serein.DynamicFlow.NodeModel.SingleExpOpNode; +using static Serein.Flow.NodeModel.SingleExpOpNode; using static System.Runtime.InteropServices.JavaScript.JSType; -namespace Serein.DynamicFlow.SerinExpression +namespace Serein.Flow.SerinExpression { public class SerinArithmeticExpressionEvaluator { diff --git a/Library/DynamicFlow/Tool/DelegateGenerator.cs b/Library/Flow/Tool/DelegateGenerator.cs similarity index 98% rename from Library/DynamicFlow/Tool/DelegateGenerator.cs rename to Library/Flow/Tool/DelegateGenerator.cs index a452d35..ce76fe1 100644 --- a/Library/DynamicFlow/Tool/DelegateGenerator.cs +++ b/Library/Flow/Tool/DelegateGenerator.cs @@ -1,6 +1,7 @@ using Serein; -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; +using Serein.Flow; +using Serein.Flow.NodeModel; +using Serein.Library.IOC; using System; using System.Collections.Concurrent; using System.Collections.Generic; @@ -9,7 +10,7 @@ using System.Linq; using System.Reflection; using System.Threading.Tasks; -namespace Serein.DynamicFlow.Tool; +namespace Serein.Flow.Tool; public static class DelegateCache diff --git a/Library/DynamicFlow/Tool/DynamicTool.cs b/Library/Flow/Tool/DynamicTool.cs similarity index 99% rename from Library/DynamicFlow/Tool/DynamicTool.cs rename to Library/Flow/Tool/DynamicTool.cs index f4761ea..6b07fd2 100644 --- a/Library/DynamicFlow/Tool/DynamicTool.cs +++ b/Library/Flow/Tool/DynamicTool.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Serein.DynamicFlow.Tool +namespace Serein.Flow.Tool { #region 锁、tsk工具 (已注释) diff --git a/Library/DynamicFlow/Tool/ExpressionHelper.cs b/Library/Flow/Tool/ExpressionHelper.cs similarity index 99% rename from Library/DynamicFlow/Tool/ExpressionHelper.cs rename to Library/Flow/Tool/ExpressionHelper.cs index d34e15d..2f794e1 100644 --- a/Library/DynamicFlow/Tool/ExpressionHelper.cs +++ b/Library/Flow/Tool/ExpressionHelper.cs @@ -6,7 +6,7 @@ using System.Linq.Expressions; using System.Reflection; using System.Threading.Tasks; -namespace Serein.DynamicFlow.Tool +namespace Serein.Flow.Tool { /// /// 对于实例创建的表达式树反射 diff --git a/Library/DynamicFlow/Tool/TcsSignal.cs b/Library/Flow/Tool/TcsSignal.cs similarity index 98% rename from Library/DynamicFlow/Tool/TcsSignal.cs rename to Library/Flow/Tool/TcsSignal.cs index 07cdac4..a60faf6 100644 --- a/Library/DynamicFlow/Tool/TcsSignal.cs +++ b/Library/Flow/Tool/TcsSignal.cs @@ -5,7 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Serein.DynamicFlow.Tool +namespace Serein.Flow.Tool { public class TcsSignalException : Exception { diff --git a/Library/DynamicFlow/Tool/TypeDefinition.cs b/Library/Flow/Tool/TypeDefinition.cs similarity index 94% rename from Library/DynamicFlow/Tool/TypeDefinition.cs rename to Library/Flow/Tool/TypeDefinition.cs index 5567563..038c3ab 100644 --- a/Library/DynamicFlow/Tool/TypeDefinition.cs +++ b/Library/Flow/Tool/TypeDefinition.cs @@ -1,10 +1,10 @@ -using Serein.DynamicFlow; +using Serein.Flow; using System; using System.Collections.Concurrent; using System.Reflection.Metadata.Ecma335; using System.Runtime.CompilerServices; -namespace Serein.DynamicFlow.Tool +namespace Serein.Flow.Tool { diff --git a/Library/Web/Attribute.cs b/Library/Http/Attribute.cs similarity index 99% rename from Library/Web/Attribute.cs rename to Library/Http/Attribute.cs index d674a7c..80c9f20 100644 --- a/Library/Web/Attribute.cs +++ b/Library/Http/Attribute.cs @@ -1,6 +1,6 @@ using System; -namespace Serein.Web +namespace Serein.Library.Http { /// /// 表示参数为url中的数据(Get请求中不需要显式标注) diff --git a/Library/Web/ControllerBase.cs b/Library/Http/ControllerBase.cs similarity index 92% rename from Library/Web/ControllerBase.cs rename to Library/Http/ControllerBase.cs index 210dade..812d684 100644 --- a/Library/Web/ControllerBase.cs +++ b/Library/Http/ControllerBase.cs @@ -1,4 +1,4 @@ -namespace Serein.Web +namespace Serein.Library.Http { public class ControllerBase { diff --git a/Library/Web/Router.cs b/Library/Http/Router.cs similarity index 99% rename from Library/Web/Router.cs rename to Library/Http/Router.cs index 0ed0d5f..6abb23d 100644 --- a/Library/Web/Router.cs +++ b/Library/Http/Router.cs @@ -1,8 +1,10 @@ -using Serein.Tool; -using Newtonsoft.Json; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using Serein.Library.IOC; +using Serein.Tool; using System.Collections; using System.Collections.Concurrent; +using System.Collections.Generic; using System.Net; using System.Reflection; using System.Text; @@ -10,7 +12,7 @@ using System.Web; using Enum = System.Enum; using Type = System.Type; -namespace Serein.Web +namespace Serein.Library.Http { diff --git a/Library/Web/WebAPIAttribute.cs b/Library/Http/WebAPIAttribute.cs similarity index 98% rename from Library/Web/WebAPIAttribute.cs rename to Library/Http/WebAPIAttribute.cs index 1336519..2e334e2 100644 --- a/Library/Web/WebAPIAttribute.cs +++ b/Library/Http/WebAPIAttribute.cs @@ -1,8 +1,9 @@ -using System.Collections.Concurrent; +using Serein.Library.IOC; +using System.Collections.Concurrent; using System.Net; using System.Security.AccessControl; -namespace Serein.Web +namespace Serein.Library.Http { /// diff --git a/Library/IOC/ServiceContainer.cs b/Library/IOC/ServiceContainer.cs new file mode 100644 index 0000000..8af5029 --- /dev/null +++ b/Library/IOC/ServiceContainer.cs @@ -0,0 +1,413 @@ +using Serein.Library.Http; +using SqlSugar; +using System.Collections.Concurrent; +using System.Reflection; + +namespace Serein.Library.IOC +{ + + + public interface IServiceContainer + { + /// + /// 获取或创建类型的实例(不注入依赖项) + /// + object GetOrCreateServiceInstance(Type serviceType, params object[] parameters); + T CreateServiceInstance(params object[] parameters); + IServiceContainer Reset(); // 清空 + IServiceContainer Register(Type type, params object[] parameters); + IServiceContainer Register(params object[] parameters); + IServiceContainer Register(params object[] parameters) where TImplementation : TService; + T Get(); + object Get(Type type); + + /// + /// 创建目标类型的对象, 并注入依赖项 + /// + object? Instantiate(Type type, params object[] parameters); + IServiceContainer Build(); + IServiceContainer Run(Action action); + IServiceContainer Run(Action action); + IServiceContainer Run(Action action); + IServiceContainer Run(Action action); + IServiceContainer Run(Action action); + IServiceContainer Run(Action action); + IServiceContainer Run(Action action); + IServiceContainer Run(Action action); + } + + public class ServiceContainer : IServiceContainer + { + + private readonly ConcurrentDictionary _dependencies; + private readonly ConcurrentDictionary _typeMappings; + private readonly List _waitingForInstantiation; + + public ServiceContainer() + { + + _dependencies = new ConcurrentDictionary + { + [typeof(IServiceContainer).FullName] = this + }; + + _typeMappings = new ConcurrentDictionary(); + _waitingForInstantiation = []; + } + public object GetOrCreateServiceInstance(Type type, params object[] parameters) + { + Register(type); + object instance; + + if (_dependencies.ContainsKey(type.FullName)) + { + instance = _dependencies[type.FullName]; + } + else + { + + instance = Activator.CreateInstance(type); + + + _dependencies[type.FullName] = instance; + + } + + + return instance; + + } + public T CreateServiceInstance(params object[] parameters) + { + return (T)GetOrCreateServiceInstance(typeof(T), parameters); + } + + public IServiceContainer Reset() + { + foreach(var instancei in _dependencies.Values) + { + if (typeof(IDisposable).IsAssignableFrom(instancei.GetType()) && instancei is IDisposable disposable) + { + disposable.Dispose(); + } + } + _dependencies.Clear(); + _waitingForInstantiation.Clear(); + //_typeMappings.Clear(); + return this; + } + + public IServiceContainer Register(Type type, params object[] parameters) + { + + if (!_typeMappings.ContainsKey(type.FullName)) + { + _typeMappings[type.FullName] = type; + } + + return this; + } + public IServiceContainer Register(params object[] parameters) + { + Register(typeof(T), parameters); + return this; + } + + public IServiceContainer Register(params object[] parameters) + where TImplementation : TService + { + _typeMappings[typeof(TService).FullName!] = typeof(TImplementation); + return this; + } + + public object Get(Type type) + { + + + if (!_dependencies.TryGetValue(type.FullName, out object value)) + { + Register(type); + + value = Instantiate(type); + + InjectDependencies(type); + } + + + + return value; + + } + + + public T Get() + { + + + if(!_dependencies.TryGetValue(typeof(T).FullName, out object value)) + { + Register(); + + value = Instantiate(typeof(T)); + + } + + + + + return (T)value; + + + //throw new InvalidOperationException("目标类型未创建实例"); + } + public IServiceContainer Build() + { + foreach (var type in _typeMappings.Values) + { + + if(!_dependencies.ContainsKey(type.FullName)) + { + + _dependencies[type.FullName] = Activator.CreateInstance(type); + + } + + } + + foreach (var instance in _dependencies.Values) + { + + InjectDependencies(instance); // 替换占位符 + } + + //var instance = Instantiate(item.Value); + + TryInstantiateWaitingDependencies(); + return this; + } + + public object? Instantiate(Type controllerType, params object[] parameters) + { + var instance = Activator.CreateInstance(controllerType, parameters); + if(instance != null) + { + InjectDependencies(instance); + } + return instance; + } + + private void InjectDependencies(object instance) + { + var properties = instance.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public) + .Where(p => p.CanWrite && p.GetCustomAttribute() != null); + + foreach (var property in properties) + { + var propertyType = property.PropertyType; + + if (_dependencies.TryGetValue(propertyType.FullName, out var dependencyInstance)) + { + property.SetValue(instance, dependencyInstance); + } + + } + } + + private void TryInstantiateWaitingDependencies() + { + foreach (var waitingType in _waitingForInstantiation.ToList()) + { + if (_typeMappings.TryGetValue(waitingType.FullName!, out var implementationType)) + { + var instance = Instantiate(implementationType); + if (instance != null) + { + + _dependencies[waitingType.FullName] = instance; + + _waitingForInstantiation.Remove(waitingType); + } + } + } + } + + #region run() + public IServiceContainer Run(Action action) + { + var service = Get(); + if (service != null) + { + action(service); + } + return this; + } + + public IServiceContainer Run(Action action) + { + var service1 = Get(); + var service2 = Get(); + + action(service1, service2); + return this; + } + + public IServiceContainer Run(Action action) + { + var service1 = Get(); + var service2 = Get(); + var service3 = Get(); + action(service1, service2, service3); + return this; + } + + public IServiceContainer Run(Action action) + { + var service1 = Get(); + var service2 = Get(); + var service3 = Get(); + var service4 = Get(); + action(service1, service2, service3, service4); + return this; + } + + public IServiceContainer Run(Action action) + { + var service1 = Get(); + var service2 = Get(); + var service3 = Get(); + var service4 = Get(); + var service5 = Get(); + action(service1, service2, service3, service4, service5); + return this; + } + + public IServiceContainer Run(Action action) + { + var service1 = Get(); + var service2 = Get(); + var service3 = Get(); + var service4 = Get(); + var service5 = Get(); + var service6 = Get(); + action(service1, service2, service3, service4, service5, service6); + return this; + } + + public IServiceContainer Run(Action action) + { + var service1 = Get(); + var service2 = Get(); + var service3 = Get(); + var service4 = Get(); + var service5 = Get(); + var service6 = Get(); + var service7 = Get(); + action(service1, service2, service3, service4, service5, service6, service7); + return this; + } + + public IServiceContainer Run(Action action) + { + var service1 = Get(); + var service2 = Get(); + var service3 = Get(); + var service4 = Get(); + var service5 = Get(); + var service6 = Get(); + var service7 = Get(); + var service8 = Get(); + action(service1, service2, service3, service4, service5, service6, service7, service8); + return this; + } + + #endregion + } + + + /* public interface IServiceContainer + { + ServiceContainer Register(params object[] parameters); + ServiceContainer Register(params object[] parameters) where TImplementation : TService; + TService Resolve(); + void Get(Action action); + object Instantiate(Type type, params object[] parameters); + + } + public class ServiceContainer : IServiceContainer + { + private readonly Dictionary _dependencies; + public ServiceContainer() + { + _dependencies = new Dictionary + { + [typeof(IServiceContainer)] = this + }; + } + + public void Get(Action action) + { + var service = Resolve(); + action(service); + } + public ServiceContainer Register(params object[] parameters) + { + var instance = Instantiate(typeof(T), parameters); + _dependencies[typeof(T)] = instance; + return this; + } + + public ServiceContainer Register(params object[] parameters) + where TImplementation : TService + { + + _dependencies[typeof(TService)] = Instantiate(typeof(TImplementation), parameters); + return this; + } + + + public TService Resolve() + { + return (TService)_dependencies[typeof(TService)]; + } + + public object Instantiate(Type controllerType, params object[] parameters) + { + var constructors = controllerType.GetConstructors(); // 获取控制器的所有构造函数 + + // 查找具有最多参数的构造函数 + var constructor = constructors.OrderByDescending(c => c.GetParameters().Length).FirstOrDefault(); + + if (constructor != null) + { + if (parameters.Length > 0) + { + return Activator.CreateInstance(controllerType, parameters); + } + else { + var tmpParameters = constructor.GetParameters(); + var dependencyInstances = new List(); + + foreach (var parameter in tmpParameters) + { + var parameterType = parameter.ParameterType; + _dependencies.TryGetValue(parameterType, out var dependencyInstance); + dependencyInstances.Add(dependencyInstance); + if (dependencyInstance == null) + { + return null; + } + } + // 用解析的依赖项实例化目标类型 + return Activator.CreateInstance(controllerType, dependencyInstances.ToArray()); + } + } + else + { + return Activator.CreateInstance(controllerType); + } + } + }*/ + + + +} diff --git a/Library/Serein.Library.csproj b/Library/Serein.Library.csproj index c7d7d5f..ec7db40 100644 --- a/Library/Serein.Library.csproj +++ b/Library/Serein.Library.csproj @@ -14,8 +14,16 @@ + + + + + + + + diff --git a/Library/ServiceContainer.cs b/Library/ServiceContainer.cs index cdff96b..f8e490c 100644 --- a/Library/ServiceContainer.cs +++ b/Library/ServiceContainer.cs @@ -1,418 +1,418 @@ -using Serein.Web; -using Microsoft.Win32; -using NetTaste; -using System.Collections.Concurrent; -using System.Reflection; -using System; -using System.Linq; -using System.Collections.Generic; -using SqlSugar; - -namespace Serein -{ - - - public interface IServiceContainer - { - /// - /// 获取或创建类型的实例(不注入依赖项) - /// - object GetOrCreateServiceInstance(Type serviceType, params object[] parameters); - T CreateServiceInstance(params object[] parameters); - IServiceContainer Reset(); // 清空 - IServiceContainer Register(Type type, params object[] parameters); - IServiceContainer Register(params object[] parameters); - IServiceContainer Register(params object[] parameters) where TImplementation : TService; - T Get(); - object Get(Type type); - - /// - /// 创建目标类型的对象, 并注入依赖项 - /// - object? Instantiate(Type type, params object[] parameters); - IServiceContainer Build(); - IServiceContainer Run(Action action); - IServiceContainer Run(Action action); - IServiceContainer Run(Action action); - IServiceContainer Run(Action action); - IServiceContainer Run(Action action); - IServiceContainer Run(Action action); - IServiceContainer Run(Action action); - IServiceContainer Run(Action action); - } - - public class ServiceContainer : IServiceContainer - { - - private readonly ConcurrentDictionary _dependencies; - private readonly ConcurrentDictionary _typeMappings; - private readonly List _waitingForInstantiation; - - public ServiceContainer() - { - - _dependencies = new ConcurrentDictionary - { - [typeof(IServiceContainer).FullName] = this - }; - - _typeMappings = new ConcurrentDictionary(); - _waitingForInstantiation = []; - } - public object GetOrCreateServiceInstance(Type type, params object[] parameters) - { - Register(type); - object instance; +//using Serein.Web; +//using Microsoft.Win32; +//using NetTaste; +//using System.Collections.Concurrent; +//using System.Reflection; +//using System; +//using System.Linq; +//using System.Collections.Generic; +//using SqlSugar; + +//namespace Serein +//{ + + +// public interface IServiceContainer +// { +// /// +// /// 获取或创建类型的实例(不注入依赖项) +// /// +// object GetOrCreateServiceInstance(Type serviceType, params object[] parameters); +// T CreateServiceInstance(params object[] parameters); +// IServiceContainer Reset(); // 清空 +// IServiceContainer Register(Type type, params object[] parameters); +// IServiceContainer Register(params object[] parameters); +// IServiceContainer Register(params object[] parameters) where TImplementation : TService; +// T Get(); +// object Get(Type type); + +// /// +// /// 创建目标类型的对象, 并注入依赖项 +// /// +// object? Instantiate(Type type, params object[] parameters); +// IServiceContainer Build(); +// IServiceContainer Run(Action action); +// IServiceContainer Run(Action action); +// IServiceContainer Run(Action action); +// IServiceContainer Run(Action action); +// IServiceContainer Run(Action action); +// IServiceContainer Run(Action action); +// IServiceContainer Run(Action action); +// IServiceContainer Run(Action action); +// } + +// public class ServiceContainer : IServiceContainer +// { + +// private readonly ConcurrentDictionary _dependencies; +// private readonly ConcurrentDictionary _typeMappings; +// private readonly List _waitingForInstantiation; + +// public ServiceContainer() +// { + +// _dependencies = new ConcurrentDictionary +// { +// [typeof(IServiceContainer).FullName] = this +// }; + +// _typeMappings = new ConcurrentDictionary(); +// _waitingForInstantiation = []; +// } +// public object GetOrCreateServiceInstance(Type type, params object[] parameters) +// { +// Register(type); +// object instance; - if (_dependencies.ContainsKey(type.FullName)) - { - instance = _dependencies[type.FullName]; - } - else - { +// if (_dependencies.ContainsKey(type.FullName)) +// { +// instance = _dependencies[type.FullName]; +// } +// else +// { - instance = Activator.CreateInstance(type); +// instance = Activator.CreateInstance(type); - _dependencies[type.FullName] = instance; +// _dependencies[type.FullName] = instance; - } +// } - return instance; +// return instance; - } - public T CreateServiceInstance(params object[] parameters) - { - return (T)GetOrCreateServiceInstance(typeof(T), parameters); - } +// } +// public T CreateServiceInstance(params object[] parameters) +// { +// return (T)GetOrCreateServiceInstance(typeof(T), parameters); +// } - public IServiceContainer Reset() - { - foreach(var instancei in _dependencies.Values) - { - if (typeof(IDisposable).IsAssignableFrom(instancei.GetType()) && instancei is IDisposable disposable) - { - disposable.Dispose(); - } - } - _dependencies.Clear(); - _waitingForInstantiation.Clear(); - //_typeMappings.Clear(); - return this; - } +// public IServiceContainer Reset() +// { +// foreach(var instancei in _dependencies.Values) +// { +// if (typeof(IDisposable).IsAssignableFrom(instancei.GetType()) && instancei is IDisposable disposable) +// { +// disposable.Dispose(); +// } +// } +// _dependencies.Clear(); +// _waitingForInstantiation.Clear(); +// //_typeMappings.Clear(); +// return this; +// } - public IServiceContainer Register(Type type, params object[] parameters) - { +// public IServiceContainer Register(Type type, params object[] parameters) +// { - if (!_typeMappings.ContainsKey(type.FullName)) - { - _typeMappings[type.FullName] = type; - } +// if (!_typeMappings.ContainsKey(type.FullName)) +// { +// _typeMappings[type.FullName] = type; +// } - return this; - } - public IServiceContainer Register(params object[] parameters) - { - Register(typeof(T), parameters); - return this; - } +// return this; +// } +// public IServiceContainer Register(params object[] parameters) +// { +// Register(typeof(T), parameters); +// return this; +// } - public IServiceContainer Register(params object[] parameters) - where TImplementation : TService - { - _typeMappings[typeof(TService).FullName!] = typeof(TImplementation); - return this; - } +// public IServiceContainer Register(params object[] parameters) +// where TImplementation : TService +// { +// _typeMappings[typeof(TService).FullName!] = typeof(TImplementation); +// return this; +// } - public object Get(Type type) - { +// public object Get(Type type) +// { - if (!_dependencies.TryGetValue(type.FullName, out object value)) - { - Register(type); +// if (!_dependencies.TryGetValue(type.FullName, out object value)) +// { +// Register(type); - value = Instantiate(type); +// value = Instantiate(type); - InjectDependencies(type); - } +// InjectDependencies(type); +// } - return value; +// return value; - } +// } - public T Get() - { +// public T Get() +// { - if(!_dependencies.TryGetValue(typeof(T).FullName, out object value)) - { - Register(); +// if(!_dependencies.TryGetValue(typeof(T).FullName, out object value)) +// { +// Register(); - value = Instantiate(typeof(T)); +// value = Instantiate(typeof(T)); - } +// } - return (T)value; +// return (T)value; - //throw new InvalidOperationException("目标类型未创建实例"); - } - public IServiceContainer Build() - { - foreach (var type in _typeMappings.Values) - { +// //throw new InvalidOperationException("目标类型未创建实例"); +// } +// public IServiceContainer Build() +// { +// foreach (var type in _typeMappings.Values) +// { - if(!_dependencies.ContainsKey(type.FullName)) - { +// if(!_dependencies.ContainsKey(type.FullName)) +// { - _dependencies[type.FullName] = Activator.CreateInstance(type); +// _dependencies[type.FullName] = Activator.CreateInstance(type); - } +// } - } +// } - foreach (var instance in _dependencies.Values) - { - - InjectDependencies(instance); // 替换占位符 - } - - //var instance = Instantiate(item.Value); - - TryInstantiateWaitingDependencies(); - return this; - } - - public object? Instantiate(Type controllerType, params object[] parameters) - { - var instance = Activator.CreateInstance(controllerType, parameters); - if(instance != null) - { - InjectDependencies(instance); - } - return instance; - } - - private void InjectDependencies(object instance) - { - var properties = instance.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public) - .Where(p => p.CanWrite && p.GetCustomAttribute() != null); - - foreach (var property in properties) - { - var propertyType = property.PropertyType; - - if (_dependencies.TryGetValue(propertyType.FullName, out var dependencyInstance)) - { - property.SetValue(instance, dependencyInstance); - } - - } - } - - private void TryInstantiateWaitingDependencies() - { - foreach (var waitingType in _waitingForInstantiation.ToList()) - { - if (_typeMappings.TryGetValue(waitingType.FullName!, out var implementationType)) - { - var instance = Instantiate(implementationType); - if (instance != null) - { - - _dependencies[waitingType.FullName] = instance; - - _waitingForInstantiation.Remove(waitingType); - } - } - } - } - - #region run() - public IServiceContainer Run(Action action) - { - var service = Get(); - if (service != null) - { - action(service); - } - return this; - } - - public IServiceContainer Run(Action action) - { - var service1 = Get(); - var service2 = Get(); - - action(service1, service2); - return this; - } - - public IServiceContainer Run(Action action) - { - var service1 = Get(); - var service2 = Get(); - var service3 = Get(); - action(service1, service2, service3); - return this; - } - - public IServiceContainer Run(Action action) - { - var service1 = Get(); - var service2 = Get(); - var service3 = Get(); - var service4 = Get(); - action(service1, service2, service3, service4); - return this; - } - - public IServiceContainer Run(Action action) - { - var service1 = Get(); - var service2 = Get(); - var service3 = Get(); - var service4 = Get(); - var service5 = Get(); - action(service1, service2, service3, service4, service5); - return this; - } - - public IServiceContainer Run(Action action) - { - var service1 = Get(); - var service2 = Get(); - var service3 = Get(); - var service4 = Get(); - var service5 = Get(); - var service6 = Get(); - action(service1, service2, service3, service4, service5, service6); - return this; - } - - public IServiceContainer Run(Action action) - { - var service1 = Get(); - var service2 = Get(); - var service3 = Get(); - var service4 = Get(); - var service5 = Get(); - var service6 = Get(); - var service7 = Get(); - action(service1, service2, service3, service4, service5, service6, service7); - return this; - } - - public IServiceContainer Run(Action action) - { - var service1 = Get(); - var service2 = Get(); - var service3 = Get(); - var service4 = Get(); - var service5 = Get(); - var service6 = Get(); - var service7 = Get(); - var service8 = Get(); - action(service1, service2, service3, service4, service5, service6, service7, service8); - return this; - } - - #endregion - } - - - /* public interface IServiceContainer - { - ServiceContainer Register(params object[] parameters); - ServiceContainer Register(params object[] parameters) where TImplementation : TService; - TService Resolve(); - void Get(Action action); - object Instantiate(Type type, params object[] parameters); - - } - public class ServiceContainer : IServiceContainer - { - private readonly Dictionary _dependencies; - public ServiceContainer() - { - _dependencies = new Dictionary - { - [typeof(IServiceContainer)] = this - }; - } - - public void Get(Action action) - { - var service = Resolve(); - action(service); - } - public ServiceContainer Register(params object[] parameters) - { - var instance = Instantiate(typeof(T), parameters); - _dependencies[typeof(T)] = instance; - return this; - } - - public ServiceContainer Register(params object[] parameters) - where TImplementation : TService - { - - _dependencies[typeof(TService)] = Instantiate(typeof(TImplementation), parameters); - return this; - } - - - public TService Resolve() - { - return (TService)_dependencies[typeof(TService)]; - } - - public object Instantiate(Type controllerType, params object[] parameters) - { - var constructors = controllerType.GetConstructors(); // 获取控制器的所有构造函数 - - // 查找具有最多参数的构造函数 - var constructor = constructors.OrderByDescending(c => c.GetParameters().Length).FirstOrDefault(); - - if (constructor != null) - { - if (parameters.Length > 0) - { - return Activator.CreateInstance(controllerType, parameters); - } - else { - var tmpParameters = constructor.GetParameters(); - var dependencyInstances = new List(); - - foreach (var parameter in tmpParameters) - { - var parameterType = parameter.ParameterType; - _dependencies.TryGetValue(parameterType, out var dependencyInstance); - dependencyInstances.Add(dependencyInstance); - if (dependencyInstance == null) - { - return null; - } - } - // 用解析的依赖项实例化目标类型 - return Activator.CreateInstance(controllerType, dependencyInstances.ToArray()); - } - } - else - { - return Activator.CreateInstance(controllerType); - } - } - }*/ - - - -} +// foreach (var instance in _dependencies.Values) +// { + +// InjectDependencies(instance); // 替换占位符 +// } + +// //var instance = Instantiate(item.Value); + +// TryInstantiateWaitingDependencies(); +// return this; +// } + +// public object? Instantiate(Type controllerType, params object[] parameters) +// { +// var instance = Activator.CreateInstance(controllerType, parameters); +// if(instance != null) +// { +// InjectDependencies(instance); +// } +// return instance; +// } + +// private void InjectDependencies(object instance) +// { +// var properties = instance.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public) +// .Where(p => p.CanWrite && p.GetCustomAttribute() != null); + +// foreach (var property in properties) +// { +// var propertyType = property.PropertyType; + +// if (_dependencies.TryGetValue(propertyType.FullName, out var dependencyInstance)) +// { +// property.SetValue(instance, dependencyInstance); +// } + +// } +// } + +// private void TryInstantiateWaitingDependencies() +// { +// foreach (var waitingType in _waitingForInstantiation.ToList()) +// { +// if (_typeMappings.TryGetValue(waitingType.FullName!, out var implementationType)) +// { +// var instance = Instantiate(implementationType); +// if (instance != null) +// { + +// _dependencies[waitingType.FullName] = instance; + +// _waitingForInstantiation.Remove(waitingType); +// } +// } +// } +// } + +// #region run() +// public IServiceContainer Run(Action action) +// { +// var service = Get(); +// if (service != null) +// { +// action(service); +// } +// return this; +// } + +// public IServiceContainer Run(Action action) +// { +// var service1 = Get(); +// var service2 = Get(); + +// action(service1, service2); +// return this; +// } + +// public IServiceContainer Run(Action action) +// { +// var service1 = Get(); +// var service2 = Get(); +// var service3 = Get(); +// action(service1, service2, service3); +// return this; +// } + +// public IServiceContainer Run(Action action) +// { +// var service1 = Get(); +// var service2 = Get(); +// var service3 = Get(); +// var service4 = Get(); +// action(service1, service2, service3, service4); +// return this; +// } + +// public IServiceContainer Run(Action action) +// { +// var service1 = Get(); +// var service2 = Get(); +// var service3 = Get(); +// var service4 = Get(); +// var service5 = Get(); +// action(service1, service2, service3, service4, service5); +// return this; +// } + +// public IServiceContainer Run(Action action) +// { +// var service1 = Get(); +// var service2 = Get(); +// var service3 = Get(); +// var service4 = Get(); +// var service5 = Get(); +// var service6 = Get(); +// action(service1, service2, service3, service4, service5, service6); +// return this; +// } + +// public IServiceContainer Run(Action action) +// { +// var service1 = Get(); +// var service2 = Get(); +// var service3 = Get(); +// var service4 = Get(); +// var service5 = Get(); +// var service6 = Get(); +// var service7 = Get(); +// action(service1, service2, service3, service4, service5, service6, service7); +// return this; +// } + +// public IServiceContainer Run(Action action) +// { +// var service1 = Get(); +// var service2 = Get(); +// var service3 = Get(); +// var service4 = Get(); +// var service5 = Get(); +// var service6 = Get(); +// var service7 = Get(); +// var service8 = Get(); +// action(service1, service2, service3, service4, service5, service6, service7, service8); +// return this; +// } + +// #endregion +// } + + +// /* public interface IServiceContainer +// { +// ServiceContainer Register(params object[] parameters); +// ServiceContainer Register(params object[] parameters) where TImplementation : TService; +// TService Resolve(); +// void Get(Action action); +// object Instantiate(Type type, params object[] parameters); + +// } +// public class ServiceContainer : IServiceContainer +// { +// private readonly Dictionary _dependencies; +// public ServiceContainer() +// { +// _dependencies = new Dictionary +// { +// [typeof(IServiceContainer)] = this +// }; +// } + +// public void Get(Action action) +// { +// var service = Resolve(); +// action(service); +// } +// public ServiceContainer Register(params object[] parameters) +// { +// var instance = Instantiate(typeof(T), parameters); +// _dependencies[typeof(T)] = instance; +// return this; +// } + +// public ServiceContainer Register(params object[] parameters) +// where TImplementation : TService +// { + +// _dependencies[typeof(TService)] = Instantiate(typeof(TImplementation), parameters); +// return this; +// } + + +// public TService Resolve() +// { +// return (TService)_dependencies[typeof(TService)]; +// } + +// public object Instantiate(Type controllerType, params object[] parameters) +// { +// var constructors = controllerType.GetConstructors(); // 获取控制器的所有构造函数 + +// // 查找具有最多参数的构造函数 +// var constructor = constructors.OrderByDescending(c => c.GetParameters().Length).FirstOrDefault(); + +// if (constructor != null) +// { +// if (parameters.Length > 0) +// { +// return Activator.CreateInstance(controllerType, parameters); +// } +// else { +// var tmpParameters = constructor.GetParameters(); +// var dependencyInstances = new List(); + +// foreach (var parameter in tmpParameters) +// { +// var parameterType = parameter.ParameterType; +// _dependencies.TryGetValue(parameterType, out var dependencyInstance); +// dependencyInstances.Add(dependencyInstance); +// if (dependencyInstance == null) +// { +// return null; +// } +// } +// // 用解析的依赖项实例化目标类型 +// return Activator.CreateInstance(controllerType, dependencyInstances.ToArray()); +// } +// } +// else +// { +// return Activator.CreateInstance(controllerType); +// } +// } +// }*/ + + + +//} diff --git a/MyDll/SampleCondition.cs b/MyDll/SampleCondition.cs index 4186baf..d59ded4 100644 --- a/MyDll/SampleCondition.cs +++ b/MyDll/SampleCondition.cs @@ -1,11 +1,6 @@ -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; -using Serein.DynamicFlow.Tool; -using Serein.Web; -using DynamicDemo.Node; -using SqlSugar; -using System; -using System.Reflection; +using Serein.Flow; +using Serein.Flow.Tool; +using Serein.Library.Http; using static MyDll.PlcDevice; namespace MyDll { diff --git a/SereinWAT/SereinWAT.cs b/SereinWAT/SereinWAT.cs index b90ae43..f9c815e 100644 --- a/SereinWAT/SereinWAT.cs +++ b/SereinWAT/SereinWAT.cs @@ -3,9 +3,8 @@ using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Edge; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.IE; -using Serein.DynamicFlow; -using Serein.DynamicFlow.Tool; -using Serein.Web; +using Serein.Flow; +using Serein.Flow.Tool; using System.Diagnostics.CodeAnalysis; namespace Serein.Module diff --git a/WorkBench/App.xaml.cs b/WorkBench/App.xaml.cs index 9294f6c..cce9f84 100644 --- a/WorkBench/App.xaml.cs +++ b/WorkBench/App.xaml.cs @@ -1,5 +1,5 @@ using Serein; -using Serein.DynamicFlow.SerinExpression; +using Serein.Flow.SerinExpression; using Serein.WorkBench.Themes; using Newtonsoft.Json; using SqlSugar; diff --git a/WorkBench/MainWindow.xaml.cs b/WorkBench/MainWindow.xaml.cs index 7da1e9e..fff7623 100644 --- a/WorkBench/MainWindow.xaml.cs +++ b/WorkBench/MainWindow.xaml.cs @@ -5,9 +5,9 @@ using Serein.WorkBench.tool; using Microsoft.Win32; using Newtonsoft.Json.Linq; using Serein; -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; -using Serein.DynamicFlow.Tool; +using Serein.Flow; +using Serein.Flow.NodeModel; +using Serein.Flow.Tool; using System.Collections.Concurrent; using System.Diagnostics; using System.IO; @@ -22,6 +22,7 @@ using static Serein.WorkBench.Connection; using DynamicDemo.Node; using Npgsql.Logging; using System.Threading.Tasks.Dataflow; +using Serein.Library.IOC; namespace Serein.WorkBench { @@ -120,7 +121,7 @@ namespace Serein.WorkBench /// /// 节点的命名空间 /// - public const string NodeSpaceName = $"{nameof(Serein)}.{nameof(Serein.DynamicFlow)}.{nameof(Serein.DynamicFlow.NodeModel)}"; + public const string NodeSpaceName = $"{nameof(Serein)}.{nameof(Serein.Flow)}.{nameof(Serein.Flow.NodeModel)}"; /// /// 一种轻量的IOC容器 /// @@ -1328,7 +1329,6 @@ namespace Serein.WorkBench } } - /// /// 控件的鼠标左键松开事件,结束拖动操作,创建连线 /// @@ -1380,24 +1380,6 @@ namespace Serein.WorkBench return; } - if (startConnectBlock != null && isRegion && startConnectBlock.Node.MethodDetails != null && startConnectBlock.Node.MethodDetails.MethodDynamicType == DynamicNodeType.Action) - { - if (!targetBlock.Node.MethodDetails.IsCanConnect(startConnectBlock.Node.MethodDetails.ReturnType)) - { - - string mboxStr = "类型不匹配。" + - "\r\n" + - $"起始节点:{startConnectBlock.Node.MethodDetails.MethodName}" + "\r\n" + - $"返回类型:{startConnectBlock.Node.MethodDetails.ReturnType.Name}" + "\r\n" + - "\r\n" + - $"起始节点:{targetBlock.Node.MethodDetails.MethodName}" + "\r\n" + - $"接收类型:{string.Join("\r\n", targetBlock.Node.MethodDetails.ExplicitDatas.Select(it => it.ToString()))}" + "\r\n"; - - MessageBox.Show(mboxStr); - return; - } - } - if (startConnectBlock != null && targetBlock != null && startConnectBlock != targetBlock) { @@ -1523,6 +1505,8 @@ namespace Serein.WorkBench FlowChartCanvas.Height = scrollViewerViewportHeight; } } + + /// /// 删除该控件,以及与该控件相关的所有连线 /// @@ -1717,6 +1701,10 @@ namespace Serein.WorkBench }*/ } + /// + /// 树形结构展开类型的成员 + /// + /// private void DisplayReturnTypeTreeViewer(Type type) { try diff --git a/WorkBench/Node/View/ActionNodeControl.xaml.cs b/WorkBench/Node/View/ActionNodeControl.xaml.cs index d4be8e3..a95f3c0 100644 --- a/WorkBench/Node/View/ActionNodeControl.xaml.cs +++ b/WorkBench/Node/View/ActionNodeControl.xaml.cs @@ -1,4 +1,4 @@ -using Serein.DynamicFlow.NodeModel; +using Serein.Flow.NodeModel; using Serein.WorkBench.Node.ViewModel; namespace Serein.WorkBench.Node.View diff --git a/WorkBench/Node/View/ActionRegionControl.xaml.cs b/WorkBench/Node/View/ActionRegionControl.xaml.cs index 4cde33b..79b6805 100644 --- a/WorkBench/Node/View/ActionRegionControl.xaml.cs +++ b/WorkBench/Node/View/ActionRegionControl.xaml.cs @@ -1,4 +1,4 @@ -using Serein.DynamicFlow.NodeModel; +using Serein.Flow.NodeModel; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; diff --git a/WorkBench/Node/View/ConditionNodeControl.xaml.cs b/WorkBench/Node/View/ConditionNodeControl.xaml.cs index ffab6a8..b1cf2ca 100644 --- a/WorkBench/Node/View/ConditionNodeControl.xaml.cs +++ b/WorkBench/Node/View/ConditionNodeControl.xaml.cs @@ -1,5 +1,5 @@ -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; +using Serein.Flow; +using Serein.Flow.NodeModel; using Serein.WorkBench.Node.ViewModel; using static Serein.WorkBench.MainWindow; using System.Windows.Controls; diff --git a/WorkBench/Node/View/ConditionRegionControl.xaml.cs b/WorkBench/Node/View/ConditionRegionControl.xaml.cs index d0af026..f810460 100644 --- a/WorkBench/Node/View/ConditionRegionControl.xaml.cs +++ b/WorkBench/Node/View/ConditionRegionControl.xaml.cs @@ -1,5 +1,5 @@ -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; +using Serein.Flow; +using Serein.Flow.NodeModel; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; diff --git a/WorkBench/Node/View/DllControlControl.xaml.cs b/WorkBench/Node/View/DllControlControl.xaml.cs index a9091df..6b4b290 100644 --- a/WorkBench/Node/View/DllControlControl.xaml.cs +++ b/WorkBench/Node/View/DllControlControl.xaml.cs @@ -1,4 +1,4 @@ -using Serein.DynamicFlow; +using Serein.Flow; using System.Windows; using System.Windows.Controls; using System.Windows.Input; diff --git a/WorkBench/Node/View/ExpOpNodeControl.xaml.cs b/WorkBench/Node/View/ExpOpNodeControl.xaml.cs index 9b06841..3ec624d 100644 --- a/WorkBench/Node/View/ExpOpNodeControl.xaml.cs +++ b/WorkBench/Node/View/ExpOpNodeControl.xaml.cs @@ -1,4 +1,4 @@ -using Serein.DynamicFlow.NodeModel; +using Serein.Flow.NodeModel; using Serein.WorkBench.Node.ViewModel; using System; using System.Collections.Generic; diff --git a/WorkBench/Node/View/FlipflopNodeControl.xaml.cs b/WorkBench/Node/View/FlipflopNodeControl.xaml.cs index c3efd2b..2d8c25f 100644 --- a/WorkBench/Node/View/FlipflopNodeControl.xaml.cs +++ b/WorkBench/Node/View/FlipflopNodeControl.xaml.cs @@ -1,5 +1,5 @@ -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; +using Serein.Flow; +using Serein.Flow.NodeModel; using Serein.WorkBench.Node.ViewModel; using System.Windows; using System.Windows.Controls; diff --git a/WorkBench/Node/View/NodeControlBase.cs b/WorkBench/Node/View/NodeControlBase.cs index e593870..b433378 100644 --- a/WorkBench/Node/View/NodeControlBase.cs +++ b/WorkBench/Node/View/NodeControlBase.cs @@ -1,5 +1,5 @@ -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; +using Serein.Flow; +using Serein.Flow.NodeModel; using Serein.WorkBench.Themes; using System.Collections.ObjectModel; using System.Collections.Specialized; diff --git a/WorkBench/Node/ViewModel/ActionNodeControlViewModel.cs b/WorkBench/Node/ViewModel/ActionNodeControlViewModel.cs index 48af632..bdc1005 100644 --- a/WorkBench/Node/ViewModel/ActionNodeControlViewModel.cs +++ b/WorkBench/Node/ViewModel/ActionNodeControlViewModel.cs @@ -1,5 +1,5 @@ -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; +using Serein.Flow; +using Serein.Flow.NodeModel; using Serein.WorkBench.Node.View; using System.ComponentModel; using System.Runtime.CompilerServices; diff --git a/WorkBench/Node/ViewModel/ConditionNodeControlViewModel.cs b/WorkBench/Node/ViewModel/ConditionNodeControlViewModel.cs index 2e1d91c..3656547 100644 --- a/WorkBench/Node/ViewModel/ConditionNodeControlViewModel.cs +++ b/WorkBench/Node/ViewModel/ConditionNodeControlViewModel.cs @@ -1,5 +1,5 @@ -using Serein.DynamicFlow; -using Serein.DynamicFlow.NodeModel; +using Serein.Flow; +using Serein.Flow.NodeModel; using Serein.WorkBench.Node.View; using System.ComponentModel; using System.Runtime.CompilerServices; diff --git a/WorkBench/Node/ViewModel/ExpOpNodeViewModel.cs b/WorkBench/Node/ViewModel/ExpOpNodeViewModel.cs index bf43d55..53004be 100644 --- a/WorkBench/Node/ViewModel/ExpOpNodeViewModel.cs +++ b/WorkBench/Node/ViewModel/ExpOpNodeViewModel.cs @@ -1,4 +1,4 @@ -using Serein.DynamicFlow.NodeModel; +using Serein.Flow.NodeModel; using Serein.WorkBench.Node.View; using System; using System.Collections.Generic; diff --git a/WorkBench/Node/ViewModel/FlipflopNodeControlViewModel.cs b/WorkBench/Node/ViewModel/FlipflopNodeControlViewModel.cs index 89e90bf..fe03fff 100644 --- a/WorkBench/Node/ViewModel/FlipflopNodeControlViewModel.cs +++ b/WorkBench/Node/ViewModel/FlipflopNodeControlViewModel.cs @@ -1,4 +1,4 @@ -using Serein.DynamicFlow.NodeModel; +using Serein.Flow.NodeModel; using Serein.WorkBench.Node.View; namespace Serein.WorkBench.Node.ViewModel diff --git a/WorkBench/Themes/MethodDetailsControl.xaml.cs b/WorkBench/Themes/MethodDetailsControl.xaml.cs index c0b4eb9..4f1962c 100644 --- a/WorkBench/Themes/MethodDetailsControl.xaml.cs +++ b/WorkBench/Themes/MethodDetailsControl.xaml.cs @@ -1,4 +1,4 @@ -using Serein.DynamicFlow; +using Serein.Flow; using System; using System.Collections; using System.Collections.Generic;