From cf86641c20ffceb831b43984be1ecd3697180c15 Mon Sep 17 00:00:00 2001 From: Argo-Tianyi Date: Fri, 2 Jul 2021 13:20:38 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Validate/ValidateBase.cs | 1 - .../Components/ValidateForm/ValidateForm.razor.cs | 2 +- src/BootstrapBlazor/Extensions/ObjectExtensions.cs | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/BootstrapBlazor/Components/Validate/ValidateBase.cs b/src/BootstrapBlazor/Components/Validate/ValidateBase.cs index b078e2b9b..17e32d3ef 100644 --- a/src/BootstrapBlazor/Components/Validate/ValidateBase.cs +++ b/src/BootstrapBlazor/Components/Validate/ValidateBase.cs @@ -270,7 +270,6 @@ namespace BootstrapBlazor.Components { // This is the first run // Could put this logic in OnInit, but its nice to avoid forcing people who override OnInit to call base.OnInit() - if (CascadedEditContext != null) { EditContext = CascadedEditContext; diff --git a/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs b/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs index 2bc178dbc..d5e93aaa0 100644 --- a/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs +++ b/src/BootstrapBlazor/Components/ValidateForm/ValidateForm.razor.cs @@ -264,7 +264,7 @@ namespace BootstrapBlazor.Components var rules = propertyInfo.GetCustomAttributes(true).OfType(); var displayName = context.DisplayName; memberName ??= propertyInfo.Name; - var attributeSpan = "Attribute".AsSpan(); + var attributeSpan = nameof(Attribute).AsSpan(); foreach (var rule in rules) { var result = rule.GetValidationResult(value, context); diff --git a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs index e4a7202d4..e39f6864e 100644 --- a/src/BootstrapBlazor/Extensions/ObjectExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ObjectExtensions.cs @@ -4,9 +4,6 @@ using Microsoft.AspNetCore.Components; using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Data; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq; -- Gitee From efee6658441acfc3939ff5a826eb427d8034ca57 Mon Sep 17 00:00:00 2001 From: Argo-Tianyi Date: Fri, 2 Jul 2021 13:21:10 +0800 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=20ICloneable?= =?UTF-8?q?=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Table/Dynamic/DataTableDynamicObject.cs | 9 --------- .../Components/Table/Dynamic/DynamicObject.cs | 18 +++++++++--------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Dynamic/DataTableDynamicObject.cs b/src/BootstrapBlazor/Components/Table/Dynamic/DataTableDynamicObject.cs index 72f3cd6b9..6a35f284e 100644 --- a/src/BootstrapBlazor/Components/Table/Dynamic/DataTableDynamicObject.cs +++ b/src/BootstrapBlazor/Components/Table/Dynamic/DataTableDynamicObject.cs @@ -16,15 +16,6 @@ namespace BootstrapBlazor.Components /// public DataRow? Row { get; set; } - /// - /// Clone 方法 - /// - /// - public override object Clone() - { - throw new System.NotImplementedException(); - } - /// /// /// diff --git a/src/BootstrapBlazor/Components/Table/Dynamic/DynamicObject.cs b/src/BootstrapBlazor/Components/Table/Dynamic/DynamicObject.cs index d576bed74..c2058d40d 100644 --- a/src/BootstrapBlazor/Components/Table/Dynamic/DynamicObject.cs +++ b/src/BootstrapBlazor/Components/Table/Dynamic/DynamicObject.cs @@ -2,31 +2,31 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // Website: https://www.blazor.zone or https://argozhang.github.io/ +using System.Linq; + namespace BootstrapBlazor.Components { /// /// 动态类型实体类 实例 /// - public class DynamicObject : IDynamicObject + public class DynamicObject { - /// - /// - /// - /// - public virtual object Clone() => new DynamicObject(); - /// /// /// /// /// - public virtual object? GetValue(string propertyName) => null; + public virtual object? GetValue(string propertyName) => LambdaExtensions.GetPropertyValue(this, propertyName); /// /// /// /// /// - public virtual void SetValue(string propertyName, object? value) { } + public virtual void SetValue(string propertyName, object? value) + { + var invoker = LambdaExtensions.SetPropertyValueLambda(this, propertyName).Compile(); + invoker(this, value); + } } } -- Gitee From 21da198d49e78ad9999bc9195c95c7484b1ce351 Mon Sep 17 00:00:00 2001 From: Argo-Tianyi Date: Fri, 2 Jul 2021 13:21:38 +0800 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20Utility=20=E8=B5=84=E6=BA=90?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E4=B8=BA?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E7=A8=8B=E5=BA=8F=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Utils/Utility.cs | 74 ++++++++++++++++------------ 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/src/BootstrapBlazor/Utils/Utility.cs b/src/BootstrapBlazor/Utils/Utility.cs index 30a2d8da3..89dafe21a 100644 --- a/src/BootstrapBlazor/Utils/Utility.cs +++ b/src/BootstrapBlazor/Utils/Utility.cs @@ -49,6 +49,8 @@ namespace BootstrapBlazor.Components /// public static string GetDisplayName(Type modelType, string fieldName) { + if (modelType.Assembly.IsDynamic) return fieldName; + var cacheKey = (CultureInfoName: CultureInfo.CurrentUICulture.Name, Type: modelType, FieldName: fieldName); if (!DisplayNameCache.TryGetValue(cacheKey, out var dn)) { @@ -109,27 +111,31 @@ namespace BootstrapBlazor.Components /// public static string? GetPlaceHolder(Type modelType, string fieldName) { - var cacheKey = (Type: modelType, FieldName: fieldName); - if (!PlaceHolderCache.TryGetValue(cacheKey, out var placeHolder)) + string? placeHolder = null; + if (!modelType.Assembly.IsDynamic) { - // 通过资源文件查找 FieldName 项 - var localizer = JsonStringLocalizerFactory.CreateLocalizer(cacheKey.Type); - var stringLocalizer = localizer?[$"{fieldName}.PlaceHolder"]; - if (stringLocalizer != null && !stringLocalizer.ResourceNotFound) + var cacheKey = (Type: modelType, FieldName: fieldName); + if (!PlaceHolderCache.TryGetValue(cacheKey, out placeHolder)) { - placeHolder = stringLocalizer.Value; - } - else if (Utility.TryGetProperty(cacheKey.Type, cacheKey.FieldName, out var propertyInfo)) - { - var placeHolderAttribute = propertyInfo.GetCustomAttribute(); - if (placeHolderAttribute != null) + // 通过资源文件查找 FieldName 项 + var localizer = JsonStringLocalizerFactory.CreateLocalizer(cacheKey.Type); + var stringLocalizer = localizer?[$"{fieldName}.PlaceHolder"]; + if (stringLocalizer != null && !stringLocalizer.ResourceNotFound) { - placeHolder = placeHolderAttribute.Text; + placeHolder = stringLocalizer.Value; } - if (!string.IsNullOrEmpty(placeHolder)) + else if (Utility.TryGetProperty(cacheKey.Type, cacheKey.FieldName, out var propertyInfo)) { - // add display name into cache - PlaceHolderCache.GetOrAdd(cacheKey, key => placeHolder); + var placeHolderAttribute = propertyInfo.GetCustomAttribute(); + if (placeHolderAttribute != null) + { + placeHolder = placeHolderAttribute.Text; + } + if (!string.IsNullOrEmpty(placeHolder)) + { + // add display name into cache + PlaceHolderCache.GetOrAdd(cacheKey, key => placeHolder); + } } } } @@ -189,24 +195,28 @@ namespace BootstrapBlazor.Components var type = item.GetType(); if (type.IsClass) { - ret = Activator.CreateInstance(); - var valType = ret?.GetType(); - if (valType != null) + var instance = Activator.CreateInstance(type); + if (instance != null) { - // 20200608 tian_teng@outlook.com 支持字段和只读属性 - foreach (var f in type.GetFields()) - { - var v = f.GetValue(item); - valType.GetField(f.Name)?.SetValue(ret, v); - }; - foreach (var p in type.GetProperties()) + ret = (TModel)instance; + var valType = ret?.GetType(); + if (valType != null) { - if (p.CanWrite) + // 20200608 tian_teng@outlook.com 支持字段和只读属性 + foreach (var f in type.GetFields()) { - var v = p.GetValue(item); - valType.GetProperty(p.Name)?.SetValue(ret, v); - } - }; + var v = f.GetValue(item); + valType.GetField(f.Name)?.SetValue(ret, v); + }; + foreach (var p in type.GetProperties()) + { + if (p.CanWrite) + { + var v = p.GetValue(item); + valType.GetProperty(p.Name)?.SetValue(ret, v); + } + }; + } } } } @@ -246,7 +256,7 @@ namespace BootstrapBlazor.Components } } - #region + #region GenerateColumns /// /// 通过指定 Model 获得 IEditorItem 集合方法 /// -- Gitee