修改了IOC容器的实现,使其更加轻量

This commit is contained in:
fengjiayi
2025-06-02 15:16:23 +08:00
parent e9832c0dbd
commit a43c611d72
10 changed files with 317 additions and 362 deletions

View File

@@ -64,9 +64,9 @@ namespace Serein.NodeFlow.Env
#endregion
#region
PersistennceInstance.Add(typeof(FlowInterruptTool).FullName, new FlowInterruptTool()); // 缓存流程实例
PersistennceInstance.Add(typeof(IFlowEnvironment).FullName, (FlowEnvironment)this); // 缓存流程实例
PersistennceInstance.Add(typeof(ISereinIOC).FullName, this); // 缓存容器服务
PersistennceInstance.Add(typeof(FlowInterruptTool), new FlowInterruptTool()); // 缓存流程实例
PersistennceInstance.Add(typeof(IFlowEnvironment), (FlowEnvironment)this); // 缓存流程实例
PersistennceInstance.Add(typeof(ISereinIOC), this); // 缓存容器服务
ReRegisterPersistennceInstance();
@@ -293,7 +293,7 @@ namespace Serein.NodeFlow.Env
/// <summary>
/// 本地运行环境缓存的持久化实例
/// </summary>
private Dictionary<string, object> PersistennceInstance { get; } = new Dictionary<string, object>();
private Dictionary<Type, object> PersistennceInstance { get; } = new Dictionary<Type, object>();
/// <summary>
/// 环境加载的节点集合
@@ -1428,13 +1428,13 @@ namespace Serein.NodeFlow.Env
/// <param name="uiContextOperation"></param>
public void SetUIContextOperation(UIContextOperation uiContextOperation)
{
this.UIContextOperation = uiContextOperation;
var fullName = typeof(UIContextOperation).FullName;
if (!string.IsNullOrEmpty(fullName))
if(uiContextOperation is not null)
{
PersistennceInstance[fullName] = uiContextOperation; // 缓存封装好的UI线程上下文
this.UIContextOperation = uiContextOperation;
PersistennceInstance[typeof(UIContextOperation)] = uiContextOperation; // 缓存封装好的UI线程上下文
}
}
@@ -2150,7 +2150,7 @@ namespace Serein.NodeFlow.Env
{
foreach (var kvp in PersistennceInstance)
{
IOC.RegisterPersistennceInstance(kvp.Key, kvp.Value);
IOC.Register(kvp.Key, () => kvp.Value);
}
}
}
@@ -2182,21 +2182,32 @@ namespace Serein.NodeFlow.Env
return this;
}
ISereinIOC ISereinIOC.Register(Type type, params object[] parameters)
ISereinIOC ISereinIOC.Register(Type type)
{
sereinIOC.Register(type, parameters);
sereinIOC.Register(type);
return this;
}
ISereinIOC ISereinIOC.Register(Type type, Func<object> getInstance)
{
sereinIOC.Register(type, getInstance);
return this;
}
ISereinIOC ISereinIOC.Register<T>(params object[] parameters)
ISereinIOC ISereinIOC.Register<T>(Func<T> getInstance)
{
sereinIOC.Register<T>(parameters);
sereinIOC.Register<T>(getInstance);
return this;
}
ISereinIOC ISereinIOC.Register<TService, TImplementation>(params object[] parameters)
ISereinIOC ISereinIOC.Register<TService, TImplementation>()
{
sereinIOC.Register<TService, TImplementation>(parameters);
sereinIOC.Register<TService, TImplementation>();
return this;
}
ISereinIOC ISereinIOC.Register<TService, TImplementation>(Func<TService> getInstance)
{
sereinIOC.Register<TService, TImplementation>(getInstance);
return this;
}
@@ -2226,11 +2237,6 @@ namespace Serein.NodeFlow.Env
//}
bool ISereinIOC.RegisterPersistennceInstance(string key, object instance)
{
PersistennceInstance.TryAdd(key, instance); // 记录需要持久化的实例
return sereinIOC.RegisterPersistennceInstance(key, instance);
}
//bool ISereinIOC.RegisterInstance(string key, object instance)
//{
@@ -2238,13 +2244,13 @@ namespace Serein.NodeFlow.Env
//}
object ISereinIOC.Instantiate(Type type)
object ISereinIOC.CreateTempObject(Type type)
{
return sereinIOC.Instantiate(type);
return sereinIOC.CreateTempObject(type);
}
T ISereinIOC.Instantiate<T>()
T ISereinIOC.CreateTempObject<T>()
{
return sereinIOC.Instantiate<T>();
return sereinIOC.CreateTempObject<T>();
}
ISereinIOC ISereinIOC.Build()
{
@@ -2252,53 +2258,7 @@ namespace Serein.NodeFlow.Env
return this;
}
ISereinIOC ISereinIOC.Run<T>(Action<T> action)
{
sereinIOC.Run(action);
return this;
}
ISereinIOC ISereinIOC.Run<T1, T2>(Action<T1, T2> action)
{
sereinIOC.Run(action);
return this;
}
ISereinIOC ISereinIOC.Run<T1, T2, T3>(Action<T1, T2, T3> action)
{
sereinIOC.Run(action);
return this;
}
ISereinIOC ISereinIOC.Run<T1, T2, T3, T4>(Action<T1, T2, T3, T4> action)
{
sereinIOC.Run(action);
return this;
}
ISereinIOC ISereinIOC.Run<T1, T2, T3, T4, T5>(Action<T1, T2, T3, T4, T5> action)
{
sereinIOC.Run(action);
return this;
}
ISereinIOC ISereinIOC.Run<T1, T2, T3, T4, T5, T6>(Action<T1, T2, T3, T4, T5, T6> action)
{
sereinIOC.Run(action);
return this;
}
ISereinIOC ISereinIOC.Run<T1, T2, T3, T4, T5, T6, T7>(Action<T1, T2, T3, T4, T5, T6, T7> action)
{
sereinIOC.Run(action);
return this;
}
ISereinIOC ISereinIOC.Run<T1, T2, T3, T4, T5, T6, T7, T8>(Action<T1, T2, T3, T4, T5, T6, T7, T8> action)
{
sereinIOC.Run(action);
return this;
}
#endregion

View File

@@ -642,11 +642,6 @@ namespace Serein.NodeFlow.Env
return IOC.Build();
}
public bool RegisterPersistennceInstance(string key, object instance)
{
return IOC.RegisterPersistennceInstance(key, instance);
}
//public bool RegisterInstance(string key, object instance)
//{
// return IOC.RegisterInstance(key, instance);
@@ -667,29 +662,39 @@ namespace Serein.NodeFlow.Env
// return IOC.Get<T>(key);
//}
public object Instantiate(Type type)
public object CreateTempObject(Type type)
{
return IOC.Instantiate(type);
return IOC.CreateTempObject(type);
}
public T Instantiate<T>()
public T CreateTempObject<T>()
{
return IOC.Instantiate<T>();
return IOC.CreateTempObject<T>();
}
public ISereinIOC Register(Type type, params object[] parameters)
public ISereinIOC Register(Type type)
{
return IOC.Register(type, parameters);
return IOC.Register(type);
}
public ISereinIOC Register<T>(params object[] parameters)
public ISereinIOC Register(Type type, Func<object> getInstance)
{
return IOC.Register<T>(parameters);
return IOC.Register(type, getInstance);
}
public ISereinIOC Register<TService, TImplementation>(params object[] parameters) where TImplementation : TService
public ISereinIOC Register<T>(Func<T> getInstance)
{
return IOC.Register<TService, TImplementation>(parameters);
return IOC.Register<T>(getInstance);
}
public ISereinIOC Register<TService, TImplementation>(Func<TService> getInstance) where TImplementation : TService
{
return IOC.Register<TService, TImplementation>(getInstance);
}
public ISereinIOC Register<TService, TImplementation>() where TImplementation : TService
{
return IOC.Register<TService, TImplementation>();
}
public ISereinIOC Reset()
@@ -697,47 +702,6 @@ namespace Serein.NodeFlow.Env
return IOC.Reset();
}
public ISereinIOC Run<T>(Action<T> action)
{
return IOC.Run(action);
}
public ISereinIOC Run<T1, T2>(Action<T1, T2> action)
{
return IOC.Run(action);
}
public ISereinIOC Run<T1, T2, T3>(Action<T1, T2, T3> action)
{
return IOC.Run(action);
}
public ISereinIOC Run<T1, T2, T3, T4>(Action<T1, T2, T3, T4> action)
{
return IOC.Run(action);
}
public ISereinIOC Run<T1, T2, T3, T4, T5>(Action<T1, T2, T3, T4, T5> action)
{
return IOC.Run(action);
}
public ISereinIOC Run<T1, T2, T3, T4, T5, T6>(Action<T1, T2, T3, T4, T5, T6> action)
{
return IOC.Run(action);
}
public ISereinIOC Run<T1, T2, T3, T4, T5, T6, T7>(Action<T1, T2, T3, T4, T5, T6, T7> action)
{
return IOC.Run(action);
}
public ISereinIOC Run<T1, T2, T3, T4, T5, T6, T7, T8>(Action<T1, T2, T3, T4, T5, T6, T7, T8> action)
{
return IOC.Run(action);
}
#endregion

View File

@@ -201,7 +201,8 @@ namespace Serein.NodeFlow
var pool = WorkOptions.FlowContextPool;
var ioc = WorkOptions.Environment.IOC;
ioc.Run<FlowInterruptTool>(fit => fit.CancelAllTrigger());// 取消所有中断
var fit = ioc.Get<FlowInterruptTool>();
fit.CancelAllTrigger(); // 取消所有中断
foreach (var md in mds) // 结束时
{
if (!env.TryGetDelegateDetails(md.AssemblyName, md.MethodName, out var dd)) // 流程运行初始化