mirror of
https://gitee.com/langsisi_admin/serein-flow
synced 2026-04-06 16:06:34 +08:00
取消使用流程上下文自定义的字典数据;更改流程环境接口的输出方式
This commit is contained in:
@@ -24,7 +24,9 @@ namespace Serein.Library.Api
|
||||
/// <summary>
|
||||
/// 用来在当前流程上下文间传递数据
|
||||
/// </summary>
|
||||
Dictionary<string, object> ContextShareData { get; }
|
||||
//Dictionary<string, object> ContextShareData { get; }
|
||||
|
||||
object Tag { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 下一个要执行的节点类别
|
||||
|
||||
@@ -89,8 +89,9 @@ namespace Serein.Library.Api
|
||||
/// <summary>
|
||||
/// 远程环境内容输出
|
||||
/// </summary>
|
||||
/// <param name="type">输出的日志类别</param>
|
||||
/// <param name="value">输出的文本信息</param>
|
||||
public delegate void EnvOutHandler(string value);
|
||||
public delegate void EnvOutHandler(InfoType type, string value);
|
||||
|
||||
|
||||
#endregion
|
||||
@@ -486,6 +487,7 @@ namespace Serein.Library.Api
|
||||
public double Y { get; private set; }
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -497,12 +499,16 @@ namespace Serein.Library.Api
|
||||
public interface IFlowEnvironment
|
||||
{
|
||||
#region 属性
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// <para>单例模式IOC容器,内部维护了一个实例字典,默认使用类型的FullName作为Key,如果以“接口-实现类”的方式注册,那么将使用接口类型的FullName作为Key。</para>
|
||||
/// <para>当某个类型注册绑定成功后,将不会因为其它地方尝试注册相同类型的行为导致类型被重新创建。</para>
|
||||
/// </summary>
|
||||
ISereinIOC IOC { get; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 环境名称
|
||||
/// </summary>
|
||||
@@ -520,9 +526,9 @@ namespace Serein.Library.Api
|
||||
bool IsControlRemoteEnv { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否运行在控制台上
|
||||
/// 信息输出等级
|
||||
/// </summary>
|
||||
// bool IsRuningOnConsole { get; }
|
||||
InfoClass InfoClass { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 流程运行状态
|
||||
@@ -626,13 +632,20 @@ namespace Serein.Library.Api
|
||||
/// </summary>
|
||||
// <param name="output"></param>
|
||||
// <param name="clearMsg"></param>
|
||||
void SetConsoleOut(); // Action<string> output, Action clearMsg
|
||||
///void SetConsoleOut(); // Action<string> output, Action clearMsg
|
||||
|
||||
/// <summary>
|
||||
/// 使用JSON处理库输出对象信息
|
||||
/// 输出信息
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
void WriteLineObjToJson(object obj);
|
||||
/// <param name="message"></param>
|
||||
/// <param name="type"></param>
|
||||
void WriteLine(InfoType type, string message, InfoClass @class = InfoClass.Trivial);
|
||||
|
||||
///// <summary>
|
||||
///// 使用JSON处理库输出对象信息
|
||||
///// </summary>
|
||||
///// <param name="obj"></param>
|
||||
//void WriteLineObjToJson(object obj);
|
||||
|
||||
/// <summary>
|
||||
/// 启动远程服务
|
||||
|
||||
47
Library/Enums/InfoType.cs
Normal file
47
Library/Enums/InfoType.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Serein.Library
|
||||
{
|
||||
/// <summary>
|
||||
/// 信息输出等级
|
||||
/// </summary>
|
||||
public enum InfoClass
|
||||
{
|
||||
/// <summary>
|
||||
/// 琐碎的
|
||||
/// </summary>
|
||||
Trivial,
|
||||
/// <summary>
|
||||
/// 一般的
|
||||
/// </summary>
|
||||
General,
|
||||
/// <summary>
|
||||
/// 重要的
|
||||
/// </summary>
|
||||
Important,
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 信息类别
|
||||
/// </summary>
|
||||
public enum InfoType
|
||||
{
|
||||
/// <summary>
|
||||
/// 普通信息
|
||||
/// </summary>
|
||||
INFO,
|
||||
/// <summary>
|
||||
/// 错误信息(但不影响运行)
|
||||
/// </summary>
|
||||
WARN,
|
||||
/// <summary>
|
||||
/// 异常信息(影响了运行)
|
||||
/// </summary>
|
||||
ERROR,
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,8 @@ using System.Threading;
|
||||
namespace Serein.Library
|
||||
{
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 节点基类(数据):条件控件,动作控件,条件区域,动作区域
|
||||
/// </summary>
|
||||
|
||||
@@ -21,6 +21,8 @@ using static Serein.Library.Utils.ChannelFlowInterrupt;
|
||||
namespace Serein.Library
|
||||
{
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 节点基类(数据):条件控件,动作控件,条件区域,动作区域
|
||||
/// </summary>
|
||||
@@ -124,7 +126,8 @@ namespace Serein.Library
|
||||
{
|
||||
if(i >= pds.Length)
|
||||
{
|
||||
Console.WriteLine($"保存的参数数量大于方法此时的入参参数数量:[{nodeInfo.Guid}][{nodeInfo.MethodName}]");
|
||||
Env.WriteLine(InfoType.ERROR, $"保存的参数数量大于方法此时的入参参数数量:[{nodeInfo.Guid}][{nodeInfo.MethodName}]");
|
||||
|
||||
break;
|
||||
}
|
||||
var pd = pds[i];
|
||||
@@ -269,9 +272,6 @@ namespace Serein.Library
|
||||
|
||||
#region 执行完成
|
||||
|
||||
|
||||
|
||||
|
||||
// 首先将指定类别后继分支的所有节点逆序推入栈中
|
||||
var nextNodes = currentNode.SuccessorNodes[context.NextOrientation];
|
||||
for (int index = nextNodes.Count - 1; index >= 0; index--)
|
||||
@@ -350,7 +350,6 @@ namespace Serein.Library
|
||||
}
|
||||
|
||||
object[] parameters;
|
||||
|
||||
Array paramsArgs = null; // 初始化可选参数
|
||||
int paramsArgIndex = 0; // 可选参数下标,与 object[] paramsArgs 一起使用
|
||||
|
||||
@@ -533,7 +532,8 @@ namespace Serein.Library
|
||||
|
||||
#region 对入参数据尝试进行转换
|
||||
object tmpVaue = null; // 临时存放数据,最后才判断是否放置可选参数数组
|
||||
if (inputParameter.GetType() == argDataType)
|
||||
var inputParameterType = inputParameter.GetType();
|
||||
if (inputParameterType == argDataType)
|
||||
{
|
||||
tmpVaue = inputParameter; // 类型一致无需转换,直接装入入参数组
|
||||
}
|
||||
@@ -551,12 +551,12 @@ namespace Serein.Library
|
||||
var valueStr = inputParameter?.ToString();
|
||||
tmpVaue = valueStr;
|
||||
}
|
||||
else if(argDataType.IsSubclassOf(inputParameter.GetType())) // 入参类型 是 预入参数据类型 的 子类/实现类
|
||||
else if(argDataType.IsSubclassOf(inputParameterType)) // 入参类型 是 预入参数据类型 的 子类/实现类
|
||||
{
|
||||
// 方法入参中,父类不能隐式转为子类,这里需要进行强制转换
|
||||
tmpVaue = ObjectConvertHelper.ConvertParentToChild(inputParameter, argDataType);
|
||||
}
|
||||
else if(argDataType.IsAssignableFrom(inputParameter.GetType())) // 入参类型 是 预入参数据类型 的 父类/接口
|
||||
else if(argDataType.IsAssignableFrom(inputParameterType)) // 入参类型 是 预入参数据类型 的 父类/接口
|
||||
{
|
||||
tmpVaue = inputParameter;
|
||||
}
|
||||
|
||||
@@ -195,68 +195,5 @@ namespace Serein.Library
|
||||
|
||||
|
||||
|
||||
///// <summary>
|
||||
///// 节点入参参数详情
|
||||
///// </summary>
|
||||
|
||||
//public partial class TempParameterDetails
|
||||
//{
|
||||
// private readonly MethodDetails methodDetails;
|
||||
|
||||
// /// <summary>
|
||||
// /// 参数索引
|
||||
// /// </summary>
|
||||
// public int Index { get; set; }
|
||||
// /// <summary>
|
||||
// /// 是否为显式参数(固定值/表达式)
|
||||
// /// </summary>
|
||||
// public bool IsExplicitData { get; set; }
|
||||
// /// <summary>
|
||||
// /// 转换器 IEnumConvertor<,>
|
||||
// /// </summary>
|
||||
// public Func<object, object> Convertor { get; set; }
|
||||
// /// <summary>
|
||||
// /// 显式类型
|
||||
// /// </summary>
|
||||
// public Type ExplicitType { get; set; }
|
||||
|
||||
// /// <summary>
|
||||
// /// 目前存在三种状态:Select/Bool/Value
|
||||
// /// <para>Select : 枚举值</para>
|
||||
// /// <para>Bool : 布尔类型</para>
|
||||
// /// <para>Value : 除以上类型之外的任意参数</para>
|
||||
// /// </summary>
|
||||
// public string ExplicitTypeName { get; set; }
|
||||
|
||||
// /// <summary>
|
||||
// /// 方法需要的类型
|
||||
// /// </summary>
|
||||
// public Type DataType { get; set; }
|
||||
|
||||
// /// <summary>
|
||||
// /// 方法入参参数名称
|
||||
// /// </summary>
|
||||
// public string Name { get; set; }
|
||||
|
||||
|
||||
// private string _dataValue;
|
||||
// /// <summary>
|
||||
// /// 入参值(在UI上输入的文本内容)
|
||||
// /// </summary>
|
||||
|
||||
// public string DataValue
|
||||
// {
|
||||
// get => _dataValue; set
|
||||
// {
|
||||
// _dataValue = value;
|
||||
// Console.WriteLine($"更改了{value}");
|
||||
// }
|
||||
// }
|
||||
|
||||
// /// <summary>
|
||||
// /// 如果是引用类型,拷贝时不会发生改变。
|
||||
// /// </summary>
|
||||
// public string[] Items { get; set; }
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace Serein.Library.Web
|
||||
var url = AddRoutesUrl(autoHostingAttribute, routeAttribute, controllerType, method);
|
||||
if (url is null) continue;
|
||||
|
||||
Console.WriteLine(url);
|
||||
SereinEnv.WriteLine(InfoType.INFO, url);
|
||||
var apiType = routeAttribute.ApiType.ToString();
|
||||
|
||||
var config = new ApiHandleConfig(method);
|
||||
@@ -248,7 +248,7 @@ namespace Serein.Library.Web
|
||||
catch (Exception ex1)
|
||||
{
|
||||
|
||||
Console.WriteLine(ex1);
|
||||
SereinEnv.WriteLine(InfoType.ERROR, ex1.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Serein.Library.Utils;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
@@ -54,7 +55,7 @@ namespace Serein.Library.Web
|
||||
catch(Exception ex)
|
||||
{
|
||||
listener = null;
|
||||
Console.WriteLine(ex);
|
||||
SereinEnv.WriteLine(InfoType.INFO, ex.ToString());
|
||||
}
|
||||
|
||||
//_ = Task.Run(async () =>
|
||||
@@ -120,7 +121,7 @@ namespace Serein.Library.Web
|
||||
// 获取用户的IP地址和端口
|
||||
IPAddress ipAddress = remoteEndPoint.Address;
|
||||
int port = remoteEndPoint.Port;
|
||||
Console.WriteLine("外部连接:" + ipAddress.ToString() + ":" + port);
|
||||
SereinEnv.WriteLine(InfoType.INFO, "外部连接:" + ipAddress.ToString() + ":" + port);
|
||||
}
|
||||
|
||||
// 停止服务器
|
||||
@@ -132,9 +133,9 @@ namespace Serein.Library.Web
|
||||
listener?.Stop(); // 停止监听
|
||||
listener?.Close(); // 关闭监听器
|
||||
}
|
||||
catch (Exception EX)
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(EX);
|
||||
SereinEnv.WriteLine(InfoType.ERROR, ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Serein.Library.Utils;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
@@ -97,7 +98,7 @@ namespace Serein.Library.Network.WebSocketCommunication.Handle
|
||||
string msgId = jsonObject.GetValue(moduleConfig.MsgIdJsonKey)?.ToString();
|
||||
if (_myMsgIdHash.Contains(msgId))
|
||||
{
|
||||
Console.WriteLine($"[{msgId}]{theme} 消息重复");
|
||||
SereinEnv.WriteLine(InfoType.WARN, $"[{msgId}]{theme} 消息重复");
|
||||
return;
|
||||
}
|
||||
context.MsgId = msgId; // 添加 ID
|
||||
@@ -118,7 +119,7 @@ namespace Serein.Library.Network.WebSocketCommunication.Handle
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"error in ws : {ex.Message}{Environment.NewLine}json value:{jsonObject}");
|
||||
SereinEnv.WriteLine(InfoType.ERROR, $"error in ws : {ex.Message}{Environment.NewLine}json value:{jsonObject}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using Serein.Library.Utils;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
@@ -169,13 +170,13 @@ namespace Serein.Library.Network.WebSocketCommunication.Handle
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Console.WriteLine($"add websocket handle model :");
|
||||
Console.WriteLine($"theme key, data key : {themeKey}, {dataKey}");
|
||||
|
||||
SereinEnv.WriteLine(InfoType.INFO, $"add websocket handle model :");
|
||||
SereinEnv.WriteLine(InfoType.ERROR, $"theme key, data key : {themeKey}, {dataKey}");
|
||||
foreach (var config in configs)
|
||||
{
|
||||
Console.WriteLine($"theme value : {config.ThemeValue} ");
|
||||
SereinEnv.WriteLine(InfoType.ERROR, $"theme value : {config.ThemeValue} ");
|
||||
var result = handleModule.AddHandleConfigs(config);
|
||||
}
|
||||
|
||||
|
||||
@@ -56,17 +56,11 @@ namespace Serein.Library.Network.WebSocketCommunication
|
||||
/// <summary>
|
||||
/// 发送消息
|
||||
/// </summary>
|
||||
/// <param name="webSocket"></param>
|
||||
/// <param name="message"></param>
|
||||
/// <returns></returns>
|
||||
public async Task SendAsync(string message)
|
||||
{
|
||||
//Console.WriteLine("发送消息");
|
||||
//await Task.Delay(2000);
|
||||
await SocketExtension.SendAsync(this._client, message); // 回复客户端
|
||||
//Console.WriteLine();
|
||||
//var buffer = Encoding.UTF8.GetBytes(message);
|
||||
//await _client.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -83,7 +83,7 @@ namespace Serein.Library
|
||||
{
|
||||
foreach (var item in value)
|
||||
{
|
||||
Console.WriteLine(item);
|
||||
SereinEnv.WriteLine(InfoType.INFO, item.ToString());
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -34,31 +34,31 @@ namespace Serein.Library.Utils
|
||||
foreach (var prop in objType.GetProperties())
|
||||
{
|
||||
var value = prop.GetValue(obj);
|
||||
Console.WriteLine($"{indent}{prop.Name} (Type: {prop.PropertyType.Name}): {value}");
|
||||
SereinEnv.WriteLine(InfoType.INFO, $"{indent}{prop.Name} (Type: {prop.PropertyType.Name}): {value}");
|
||||
|
||||
if (value != null)
|
||||
{
|
||||
if (prop.PropertyType.IsArray) // 处理数组类型
|
||||
{
|
||||
var array = (Array)value;
|
||||
Console.WriteLine($"{indent}{prop.Name} is an array with {array.Length} elements:");
|
||||
SereinEnv.WriteLine(InfoType.INFO, $"{indent}{prop.Name} is an array with {array.Length} elements:");
|
||||
for (int i = 0; i < array.Length; i++)
|
||||
{
|
||||
var element = array.GetValue(i);
|
||||
if (element != null && element.GetType().IsClass && !(element is string))
|
||||
{
|
||||
Console.WriteLine($"{indent}\tArray[{i}] (Type: {element.GetType().Name}) contains a nested object:");
|
||||
SereinEnv.WriteLine(InfoType.INFO, $"{indent}\tArray[{i}] (Type: {element.GetType().Name}) contains a nested object:");
|
||||
PrintObjectProperties(element, indent + "\t\t");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"{indent}\tArray[{i}] (Type: {element?.GetType().Name}): {element}");
|
||||
SereinEnv.WriteLine(InfoType.INFO, $"{indent}\tArray[{i}] (Type: {element?.GetType().Name}): {element}");
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (value.GetType().IsClass && !(value is string)) // 处理嵌套对象
|
||||
{
|
||||
Console.WriteLine($"{indent}{prop.Name} contains a nested object:");
|
||||
SereinEnv.WriteLine(InfoType.INFO, $"{indent}{prop.Name} contains a nested object:");
|
||||
PrintObjectProperties(value, indent + "\t");
|
||||
}
|
||||
}
|
||||
@@ -196,7 +196,7 @@ namespace Serein.Library.Utils
|
||||
if (propInfo == null)
|
||||
{
|
||||
// 属性不存在,打印警告并标记失败
|
||||
Console.WriteLine($"Warning: 属性 '{propName}' 不存在于类型 '{objType.Name}' 中,跳过赋值。");
|
||||
SereinEnv.WriteLine(InfoType.WARN, $"属性 '{propName}' 不存在于类型 '{objType.Name}' 中,跳过赋值。");
|
||||
allSuccessful = false;
|
||||
continue;
|
||||
}
|
||||
@@ -206,7 +206,7 @@ namespace Serein.Library.Utils
|
||||
if (!IsCompatibleType(targetType, propValue))
|
||||
{
|
||||
// 如果类型不兼容,打印错误并标记失败
|
||||
Console.WriteLine($"Error: 无法将类型 '{propValue?.GetType().Name}' 赋值给属性 '{propName}' (Type: {targetType.Name}),跳过赋值。");
|
||||
SereinEnv.WriteLine(InfoType.ERROR, $"无法将类型 '{propValue?.GetType().Name}' 赋值给属性 '{propName}' (Type: {targetType.Name}),跳过赋值。");
|
||||
allSuccessful = false;
|
||||
continue;
|
||||
}
|
||||
@@ -257,7 +257,7 @@ namespace Serein.Library.Utils
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Error: 为属性 '{propName}' 赋值时发生异常:{ex.Message}");
|
||||
SereinEnv.WriteLine(InfoType.ERROR, $"为属性 '{propName}' 赋值时发生异常:{ex.Message}");
|
||||
allSuccessful = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ namespace Serein.Library.Utils
|
||||
public async Task<bool> ConnectAsync()
|
||||
{
|
||||
// 第2种,WebSocket连接到远程环境,实时接收远程环境的响应?
|
||||
Console.WriteLine($"准备连接:{Config.Addres}:{Config.Port},{Config.Token}");
|
||||
SereinEnv.WriteLine(InfoType.INFO, $"准备连接:{Config.Addres}:{Config.Port},{Config.Token}");
|
||||
bool success = false;
|
||||
try
|
||||
{
|
||||
@@ -97,7 +97,7 @@ namespace Serein.Library.Utils
|
||||
}
|
||||
if (!success)
|
||||
{
|
||||
Console.WriteLine($"无法连通远程端口 {Config.Addres}:{Config.Port}");
|
||||
SereinEnv.WriteLine(InfoType.ERROR, $"无法连通远程端口 {Config.Addres}:{Config.Port}");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
@@ -150,7 +150,6 @@ namespace Serein.Library.Utils
|
||||
};
|
||||
}
|
||||
var msg = jsonData.ToString();
|
||||
//Console.WriteLine($"[{msgId}] => {theme}");
|
||||
await EnvClient.SendAsync(msg);
|
||||
}
|
||||
|
||||
|
||||
27
Library/Utils/SereinEnv.cs
Normal file
27
Library/Utils/SereinEnv.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using Serein.Library.Api;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics.Contracts;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Serein.Library.Utils
|
||||
{
|
||||
public static class SereinEnv
|
||||
{
|
||||
private static IFlowEnvironment environment;
|
||||
public static void SetEnv(IFlowEnvironment environment)
|
||||
{
|
||||
if (environment != null)
|
||||
{
|
||||
SereinEnv.environment = environment;
|
||||
}
|
||||
}
|
||||
public static void WriteLine(InfoType type, string message, InfoClass @class = InfoClass.Trivial)
|
||||
{
|
||||
SereinEnv.environment.WriteLine(type,message,@class);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -74,7 +74,7 @@ namespace Serein.Library.Utils.SereinExpression
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine(ex);
|
||||
SereinEnv.WriteLine(InfoType.ERROR, ex.ToString());
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
|
||||
namespace Serein.Library.Utils
|
||||
{
|
||||
@@ -130,7 +131,7 @@ namespace Serein.Library.Utils
|
||||
var instance = Get(type.FullName);
|
||||
if(instance is null)
|
||||
{
|
||||
Console.WriteLine("类型没有注册:" + type.FullName);
|
||||
SereinEnv.WriteLine(InfoType.INFO, "类型没有注册:" + type.FullName);
|
||||
}
|
||||
|
||||
return Get(type.FullName);
|
||||
@@ -254,8 +255,8 @@ namespace Serein.Library.Utils
|
||||
private ConstructorInfo[] GetConstructor(Type type)
|
||||
{
|
||||
return type.GetConstructors()
|
||||
.OrderByDescending(c => c.GetParameters().Length)
|
||||
.OrderBy(ctor => ctor.GetParameters().Length).ToArray();
|
||||
//.OrderByDescending(c => c.GetParameters().Length)
|
||||
.OrderByDescending(ctor => ctor.GetParameters().Length).ToArray();
|
||||
}
|
||||
|
||||
// 生成顺序
|
||||
@@ -315,11 +316,13 @@ namespace Serein.Library.Utils
|
||||
var tmpList = indegree.Where(kv => kv.Value > 0).Select(kv => kv.Key).ToList();
|
||||
if (tmpList.Count > 0)
|
||||
{
|
||||
Console.WriteLine("以下类型可能产生循环依赖,请避免循环依赖,如果确实需要循环引用,请使用 [AutoInjection] 特性注入属性");
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.Append("以下类型可能产生循环依赖,请避免循环依赖,如果确实需要循环引用,请使用 [AutoInjection] 特性注入属性");
|
||||
foreach (var kv in tmpList)
|
||||
{
|
||||
Console.WriteLine($"Class Name : {kv}");
|
||||
sb.AppendLine($"Class Name : {kv}");
|
||||
}
|
||||
SereinEnv.WriteLine(InfoType.ERROR, sb.ToString());
|
||||
}
|
||||
|
||||
return creationOrder;
|
||||
@@ -369,7 +372,7 @@ namespace Serein.Library.Utils
|
||||
argObj = CreateInstance(fullName);
|
||||
if (argObj is null)
|
||||
{
|
||||
Console.WriteLine("构造参数创建失败"); //
|
||||
SereinEnv.WriteLine(InfoType.WARN, "构造参数创建失败");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user