From 58494cb10eeea6a22387e178922451bd4ca89f93 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Thu, 19 Dec 2024 09:45:15 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20Lookup=20=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E6=94=B9=E4=B8=BA=E5=BC=82=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DemoLookupService.cs | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor.Server/Services/DemoLookupService.cs b/src/BootstrapBlazor.Server/Services/DemoLookupService.cs index f75e384897b..2d8e3d9335c 100644 --- a/src/BootstrapBlazor.Server/Services/DemoLookupService.cs +++ b/src/BootstrapBlazor.Server/Services/DemoLookupService.cs @@ -10,14 +10,28 @@ namespace Microsoft.Extensions.DependencyInjection; /// internal class DemoLookupService(IServiceProvider provider) : LookupServiceBase { - private IServiceProvider Provider { get; } = provider; + /// + /// + /// + /// + /// + /// + public override IEnumerable? GetItemsByKey(string? key, object? data) => null; - public override IEnumerable? GetItemsByKey(string? key, object? data) + /// + /// + /// + /// + /// + /// + public override async Task?> GetItemsByKeyAsync(string? key, object? data) { + await Task.Delay(1); + IEnumerable? items = null; if (key == "Foo.Complete") { - var localizer = Provider.GetRequiredService>(); + var localizer = provider.GetRequiredService>(); items = new List() { new() { Value = "True", Text = localizer["True"].Value }, From bb8699dfb96507d6426aa3333697c84ed2a57ec7 Mon Sep 17 00:00:00 2001 From: Argo-AsicoTech Date: Thu, 19 Dec 2024 10:16:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=20Lookup=20?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Services/DemoLookupService.cs | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor.Server/Services/DemoLookupService.cs b/src/BootstrapBlazor.Server/Services/DemoLookupService.cs index 2d8e3d9335c..1e50be4fe54 100644 --- a/src/BootstrapBlazor.Server/Services/DemoLookupService.cs +++ b/src/BootstrapBlazor.Server/Services/DemoLookupService.cs @@ -3,6 +3,8 @@ // See the LICENSE file in the project root for more information. // Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone +using System.Collections.Concurrent; + namespace Microsoft.Extensions.DependencyInjection; /// @@ -18,6 +20,8 @@ internal class DemoLookupService(IServiceProvider provider) : LookupServiceBase /// public override IEnumerable? GetItemsByKey(string? key, object? data) => null; + private static readonly ConcurrentDictionary> _cache = []; + /// /// /// @@ -26,17 +30,28 @@ internal class DemoLookupService(IServiceProvider provider) : LookupServiceBase /// public override async Task?> GetItemsByKeyAsync(string? key, object? data) { - await Task.Delay(1); - IEnumerable? items = null; if (key == "Foo.Complete") { - var localizer = provider.GetRequiredService>(); - items = new List() + // 使用缓存技术防止多次调用提高应用性能 + if (_cache.TryGetValue(key, out var value)) { - new() { Value = "True", Text = localizer["True"].Value }, - new() { Value = "False", Text = localizer["False"].Value } - }; + items = value; + } + else + { + // 模拟异步延时实战中大概率从数据库中获得数据 + await Task.Delay(1); + + var localizer = provider.GetRequiredService>(); + var v = new List() + { + new() { Value = "True", Text = localizer["True"].Value }, + new() { Value = "False", Text = localizer["False"].Value } + }; + _cache.TryAdd(key, v); + items = v; + } } return items; }