Skip to content

Commit 548634f

Browse files
authored
revert(EmitHelper): revert use cache logic (#7815)
* feat: 内部使用缓存解决动态表格导致 Module 过多问题 * refactor: 精简代码逻辑提高可读性 * refactor: 移动代码提高可读性 * refactor: 恢复代码撤销缓存 * revert: 撤销更改 * refactor: 撤销更改 * refactor: 精简代码提高代码可读性
1 parent 41abea9 commit 548634f

File tree

3 files changed

+6
-42
lines changed

3 files changed

+6
-42
lines changed

src/BootstrapBlazor/Dynamic/DataTableDynamicContext.cs

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -75,37 +75,16 @@ public DataTableDynamicContext(DataTable table, Action<DataTableDynamicContext,
7575
{
7676
DataTable = table;
7777
AddAttributesCallback = addAttributesCallback;
78+
OnValueChanged = OnCellValueChanged;
7879

7980
// 获得 DataTable 列信息转换为 ITableColumn 集合
8081
var cols = InternalGetColumns();
8182

82-
// Emit 生成动态类
83-
DynamicObjectType = CreateType();
83+
// 生成动态类型 DataTableDynamicObjectType 继承 DataTableDynamicObject 并添加属性
84+
DynamicObjectType = EmitHelper.CreateTypeByName($"BootstrapBlazor_{nameof(DataTableDynamicContext)}_{GetHashCode()}", cols, typeof(DataTableDynamicObject), OnColumnCreating);
8485

8586
// 获得显示列
8687
Columns = Utility.GetTableColumns(DynamicObjectType, cols).Where(col => GetShownColumns(col, invisibleColumns, shownColumns, hiddenColumns));
87-
88-
OnValueChanged = OnCellValueChanged;
89-
90-
[ExcludeFromCodeCoverage]
91-
Type CreateType()
92-
{
93-
// Emit 生成动态类 (使用缓存)
94-
var columnNames = string.Join('|', table.Columns.Cast<DataColumn>().Select(static c => $"{c.ColumnName}:{c.DataType.FullName}"));
95-
var cacheKey = $"BootstrapBlazor-{nameof(DataTableDynamicContext)}-{columnNames}";
96-
var dynamicType = CacheManager.GetDynamicObjectTypeByName(cacheKey, cols, OnColumnCreating, out var cached);
97-
98-
// 缓存命中时仍需调用回调以处理列属性
99-
if (cached && AddAttributesCallback != null)
100-
{
101-
foreach (var col in cols)
102-
{
103-
AddAttributesCallback?.Invoke(this, col);
104-
}
105-
}
106-
107-
return dynamicType ?? throw new InvalidOperationException();
108-
}
10988
}
11089

11190
private static bool GetShownColumns(ITableColumn col, IEnumerable<string>? invisibleColumns, IEnumerable<string>? shownColumns, IEnumerable<string>? hiddenColumns)

src/BootstrapBlazor/Services/CacheManager.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
using System.Globalization;
1111
using System.Linq.Expressions;
1212
using System.Reflection;
13-
using System.Reflection.Emit;
1413

1514
#if NET8_0_OR_GREATER
1615
using System.Runtime.CompilerServices;
@@ -765,18 +764,4 @@ public static object GetFormatterInvoker(Type type, Func<object, Task<string?>>
765764

766765
private static Func<TType, Task<string?>> InvokeFormatterAsync<TType>(Func<object?, Task<string?>> formatter) => new(v => formatter(v));
767766
#endregion
768-
769-
internal static Type? GetDynamicObjectTypeByName(string key, IEnumerable<ITableColumn> cols, Func<ITableColumn, IEnumerable<CustomAttributeBuilder>>? creatingCallback, out bool cached)
770-
{
771-
var created = false;
772-
var type = Instance.GetOrCreate(key, _ =>
773-
{
774-
created = true;
775-
return EmitHelper.CreateTypeByName($"BootstrapBlazor_{nameof(DataTableDynamicContext)}_{key}", cols, typeof(DataTableDynamicObject), creatingCallback);
776-
});
777-
778-
// 是否从缓存中获取到的值
779-
cached = !created;
780-
return type;
781-
}
782767
}

src/BootstrapBlazor/Utils/EmitHelper.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ public static class EmitHelper
3131
/// <para lang="zh">回调委托</para>
3232
/// <para lang="en">Callback delegate</para>
3333
/// </param>
34-
public static Type? CreateTypeByName(string typeName, IEnumerable<ITableColumn> cols, Type? parent = null, Func<ITableColumn, IEnumerable<CustomAttributeBuilder>>? creatingCallback = null)
34+
public static Type CreateTypeByName(string typeName, IEnumerable<ITableColumn> cols, Type? parent = null, Func<ITableColumn, IEnumerable<CustomAttributeBuilder>>? creatingCallback = null)
3535
{
3636
var typeBuilder = CreateTypeBuilderByName(typeName, parent);
37-
3837
foreach (var col in cols)
3938
{
4039
var attributeBuilds = creatingCallback?.Invoke(col);
4140
typeBuilder.CreateProperty(col, attributeBuilds);
4241
}
43-
return typeBuilder.CreateType();
42+
43+
return typeBuilder.CreateType()!;
4444
}
4545

4646
private static TypeBuilder CreateTypeBuilderByName(string typeName, Type? parent = null)

0 commit comments

Comments
 (0)