From 309e181c857bdedd723a716f28955191632cd869 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 12:08:42 +0800 Subject: [PATCH 01/11] =?UTF-8?q?refactor:=20=E7=B2=BE=E7=AE=80=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Extensions/ObjectExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs index d86bc9e4762..82c01563ac2 100644 --- a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs @@ -137,7 +137,7 @@ public static string GetTypeDesc(this Type t) /// 字符串类型转换为其他数据类型 /// /// - public static bool TryConvertTo(this string? source, Type type, [MaybeNullWhen(false)] out object? val) + public static bool TryConvertTo(this string? source, Type type, out object? val) { var ret = true; val = source; From 55093cb867ebf25b93f9c64ef107eb557c83a091 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 12:09:03 +0800 Subject: [PATCH 02/11] =?UTF-8?q?refactor:=20=E4=BD=BF=E7=94=A8=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E9=87=8D=E6=9E=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Extensions/ObjectExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs index 82c01563ac2..196e5fd7950 100644 --- a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs @@ -144,7 +144,7 @@ public static bool TryConvertTo(this string? source, Type type, out object? val) if (type != typeof(string)) { ret = false; - var methodInfo = Array.Find(typeof(ObjectExtensions).GetMethods(), m => m.Name == nameof(TryConvertTo) && m.IsGenericMethod); + var methodInfo = Array.Find(typeof(ObjectExtensions).GetMethods(), m => m is { Name: nameof(TryConvertTo), IsGenericMethod: true }); if (methodInfo != null) { methodInfo = methodInfo.MakeGenericMethod(type); From 505f7e75f6ca0cdb1d50e9afe518f65d550595e1 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 12:09:16 +0800 Subject: [PATCH 03/11] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Extensions/ObjectExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs index 196e5fd7950..ac24e8437b2 100644 --- a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs @@ -159,7 +159,7 @@ public static bool TryConvertTo(this string? source, Type type, out object? val) } /// - /// + /// Tries to convert the string representation of a value to a specified type. /// /// /// @@ -203,7 +203,7 @@ public static bool TryConvertTo(this string? source, [MaybeNullWhen(fals } /// - /// 格式化为 文件大小与单位格式 字符串 + /// Formats the file size into a string with appropriate units /// /// /// From 669feab19d48a8be51e4cef34152514b8476baa9 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 12:09:35 +0800 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20EnsureInitia?= =?UTF-8?q?lized=20=E6=89=A9=E5=B1=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ObjectExtensions.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs index ac24e8437b2..fd9215502c4 100644 --- a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs @@ -237,4 +237,35 @@ internal static void Clone(this TModel source, TModel item) } } } + + /// + /// Ensures that all class-type properties of the instance are initialized. + /// + /// + public static void EnsureInitialized(this object? instance) + { + if (instance == null) + { + return; + } + + // TODO: 这里使用了反射性能需要优化 Reflection performance needs to be optimized here + foreach (var propertyInfo in instance.GetType().GetProperties().Where(p => p.PropertyType.IsClass && p.PropertyType != typeof(string))) + { + var type = propertyInfo.PropertyType; + var value = propertyInfo.GetValue(instance, null); + if (value is null) + { + var pv = CreateInstance(type); + propertyInfo.SetValue(instance, pv); + } + } + } + + private static object? CreateInstance(Type type) + { + var instance = Activator.CreateInstance(type); + instance?.EnsureInitialized(); + return instance; + } } From 0cc3a2c6e1ba4df7ae4eae48a1f49ac466399bf6 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 12:09:54 +0800 Subject: [PATCH 05/11] =?UTF-8?q?feat:=20=E8=B0=83=E7=94=A8=20EnsureInitia?= =?UTF-8?q?lized=20=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs index 853f873ccaf..b401d8eddc5 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs @@ -300,7 +300,9 @@ private TItem CreateInstance() { try { - return Activator.CreateInstance(); + var instance = Activator.CreateInstance(); + instance.EnsureInitialized(); + return instance; } catch (Exception) { From 2d50077a9b09382f0af41d34061705198d4a15f6 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 12:44:58 +0800 Subject: [PATCH 06/11] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ObjectExtensions.cs | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs index fd9215502c4..42a4ebdb9c8 100644 --- a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs @@ -239,17 +239,24 @@ internal static void Clone(this TModel source, TModel item) } /// - /// Ensures that all class-type properties of the instance are initialized. + /// Creates an instance of a type and ensures all class-type properties are initialized. /// - /// - public static void EnsureInitialized(this object? instance) + /// The type to create an instance of. + /// An instance of the specified type with initialized properties. + public static TItem CreateInstanceWithInitialized() { - if (instance == null) - { - return; - } + var instance = Activator.CreateInstance(); + instance?.EnsureInitialized(); + return instance; + } - // TODO: 这里使用了反射性能需要优化 Reflection performance needs to be optimized here + /// + /// Ensures that all class-type properties of the instance are initialized. + /// + /// The instance to initialize properties for. + public static void EnsureInitialized(this object instance) + { + // Reflection performance needs to be optimized here foreach (var propertyInfo in instance.GetType().GetProperties().Where(p => p.PropertyType.IsClass && p.PropertyType != typeof(string))) { var type = propertyInfo.PropertyType; From d3c323ef9117a53b539822e372dbacf83c2c71e3 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 12:45:26 +0800 Subject: [PATCH 07/11] =?UTF-8?q?refactor:=20=E5=85=BC=E5=AE=B9=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=E4=B8=BA=E7=B1=BB=E6=97=B6=E6=9C=AA=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs index b401d8eddc5..9db69b2765a 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs @@ -300,13 +300,11 @@ private TItem CreateInstance() { try { - var instance = Activator.CreateInstance(); - instance.EnsureInitialized(); - return instance; + return ObjectExtensions.CreateInstanceWithInitialized(); } - catch (Exception) + catch (Exception ex) { - throw new InvalidOperationException($"{typeof(TItem)} missing new() method. Please provider {nameof(CreateItemCallback)} create the {typeof(TItem)} instance. {typeof(TItem)} 未提供无参构造函数 new() 请通过 {nameof(CreateItemCallback)} 回调方法创建实例"); + throw new InvalidOperationException($"{typeof(TItem)} missing new() method. Please provider {nameof(CreateItemCallback)} create the {typeof(TItem)} instance. {typeof(TItem)} 未提供无参构造函数 new() 请通过 {nameof(CreateItemCallback)} 回调方法创建实例", ex); } } From 358f604ed8572814c6b72e791ef6072989c4928c Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 12:46:50 +0800 Subject: [PATCH 08/11] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs | 2 +- src/BootstrapBlazor/Extensions/ObjectExtensions.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs index 9db69b2765a..9fc29f9694a 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs @@ -300,7 +300,7 @@ private TItem CreateInstance() { try { - return ObjectExtensions.CreateInstanceWithInitialized(); + return ObjectExtensions.CreateInstanceWithCascade(); } catch (Exception ex) { diff --git a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs index 42a4ebdb9c8..dde9c337485 100644 --- a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs @@ -243,7 +243,7 @@ internal static void Clone(this TModel source, TModel item) /// /// The type to create an instance of. /// An instance of the specified type with initialized properties. - public static TItem CreateInstanceWithInitialized() + public static TItem CreateInstanceWithCascade() { var instance = Activator.CreateInstance(); instance?.EnsureInitialized(); @@ -254,7 +254,7 @@ public static TItem CreateInstanceWithInitialized() /// Ensures that all class-type properties of the instance are initialized. /// /// The instance to initialize properties for. - public static void EnsureInitialized(this object instance) + private static void EnsureInitialized(this object instance) { // Reflection performance needs to be optimized here foreach (var propertyInfo in instance.GetType().GetProperties().Where(p => p.PropertyType.IsClass && p.PropertyType != typeof(string))) From 7359535dd9a30548e5b62ca18a45db39b95728c0 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 14:05:17 +0800 Subject: [PATCH 09/11] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=96=B0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Extensions/ObjectExtensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs index dde9c337485..637e0db9f6a 100644 --- a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs @@ -246,7 +246,7 @@ internal static void Clone(this TModel source, TModel item) public static TItem CreateInstanceWithCascade() { var instance = Activator.CreateInstance(); - instance?.EnsureInitialized(); + instance!.EnsureInitialized(); return instance; } @@ -272,7 +272,7 @@ private static void EnsureInitialized(this object instance) private static object? CreateInstance(Type type) { var instance = Activator.CreateInstance(type); - instance?.EnsureInitialized(); + instance!.EnsureInitialized(); return instance; } } From d106512bdaa9dc17924bcef296048066efd692d8 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 14:08:25 +0800 Subject: [PATCH 10/11] chore: bump version 9.4.3-beta04 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 91eaeb1b231..bf5f5cb5aca 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 9.4.3-beta03 + 9.4.3-beta04 From 2d9ff6684ef237179fee37618c8e133e21d32929 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 2 Mar 2025 14:18:41 +0800 Subject: [PATCH 11/11] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=AD=A3=E5=8D=95?= =?UTF-8?q?=E8=AF=8D=E6=8B=BC=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs index 9fc29f9694a..33343ab736b 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs @@ -304,7 +304,7 @@ private TItem CreateInstance() } catch (Exception ex) { - throw new InvalidOperationException($"{typeof(TItem)} missing new() method. Please provider {nameof(CreateItemCallback)} create the {typeof(TItem)} instance. {typeof(TItem)} 未提供无参构造函数 new() 请通过 {nameof(CreateItemCallback)} 回调方法创建实例", ex); + throw new InvalidOperationException($"{typeof(TItem)} missing new() method. Please provide {nameof(CreateItemCallback)} create the {typeof(TItem)} instance. {typeof(TItem)} 未提供无参构造函数 new() 请通过 {nameof(CreateItemCallback)} 回调方法创建实例", ex); } }