diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Cell.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs similarity index 100% rename from Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Cell.cs rename to Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Cell.cs.meta b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs.meta similarity index 100% rename from Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Cell.cs.meta rename to Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Cell.cs.meta diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/TypeUtil.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs similarity index 71% rename from Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/TypeUtil.cs rename to Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs index b53bd54..291fc6c 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/TypeUtil.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs @@ -4,7 +4,7 @@ using UnityEngine; namespace Tools.ExcelResolver.Editor { - internal static class TypeUtil + internal static partial class ExcelResolverUtil { internal static TType GetTTypeByString(string typeText) @@ -90,5 +90,51 @@ namespace Tools.ExcelResolver.Editor throw new ArgumentException($"Unsupported type: {typeText}"); } + + /// + /// 类型缓存,避免重复反射查找 + /// + internal static readonly Dictionary TypeCache = new(StringComparer.OrdinalIgnoreCase); + + /// + /// 通过类名(含命名空间)获取 Type,并缓存 + /// + internal static Type GetOrCacheTypeByName(string typeName) + { + if (TypeCache.TryGetValue(typeName, out Type cachedType)) + { + return cachedType; + } + + string namespacedType = $"Tools.ExcelResolver.{typeName}"; + Type type = Type.GetType(namespacedType, false, true) ?? GetTypeFromAllAssemblies(namespacedType); + + if (type != null) + { + TypeCache[typeName] = type; + } + + return type; + } + + internal static Type GetTypeFromAllAssemblies(string typeName) + { + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + var type = assembly.GetType(typeName); + if (type != null) + { + TypeCache[typeName] = type; + return type; + } + } + + throw new ArgumentException($"Unsupported type: {typeName}"); + } + + internal static void Dispose() + { + TypeCache.Clear(); + } } } \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Type.cs.meta b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs.meta similarity index 100% rename from Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Type.cs.meta rename to Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/ExcelResolverUtil.Type.cs.meta diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/TypeUtil.cs.meta b/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/TypeUtil.cs.meta deleted file mode 100644 index 847a70a..0000000 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/Core/Util/TypeUtil.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 5e00e18dfb2244dbb54a891cd3505c9c -timeCreated: 1736011944 \ No newline at end of file diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs index 95ee1a4..e822688 100644 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs +++ b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverEditorWindow.ReadExcel.cs @@ -137,7 +137,7 @@ namespace Tools.ExcelResolver.Editor colIndex = col, varName = worksheet.Cells[2, col].Text, typeString = worksheet.Cells[3, col].Text, - type = TypeUtil.GetTTypeByString(worksheet.Cells[3, col].Text), + type = ExcelResolverUtil.GetTTypeByString(worksheet.Cells[3, col].Text), info = worksheet.Cells[4, col].Text, description = worksheet.Cells[5, col].Text, path = worksheet.Cells[6, col].Text, diff --git a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Type.cs b/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Type.cs deleted file mode 100644 index 2fe71a8..0000000 --- a/Assets/Unity-Tools/Core/ExcelResolver/Editor/ExcelResolverUtil.Type.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Tools.ExcelResolver.Editor -{ - internal static partial class ExcelResolverUtil - { - /// - /// 类型缓存,避免重复反射查找 - /// - internal static readonly Dictionary TypeCache = new(StringComparer.OrdinalIgnoreCase); - - /// - /// 通过类名(含命名空间)获取 Type,并缓存 - /// - internal static Type GetOrCacheTypeByName(string typeName) - { - if (TypeCache.TryGetValue(typeName, out Type cachedType)) - { - return cachedType; - } - - string namespacedType = $"Tools.ExcelResolver.{typeName}"; - Type type = Type.GetType(namespacedType, false, true) ?? GetTypeFromAllAssemblies(namespacedType); - - if (type != null) - { - TypeCache[typeName] = type; - } - - return type; - } - - internal static Type GetTypeFromAllAssemblies(string typeName) - { - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) - { - var type = assembly.GetType(typeName); - if (type != null) - { - TypeCache[typeName] = type; - return type; - } - } - - throw new ArgumentException($"Unsupported type: {typeName}"); - } - - internal static void Dispose() - { - TypeCache.Clear(); - } - } -} \ No newline at end of file