Skip to content

Commit 94261e8

Browse files
authored
Merge branch 'main' into refactor-tooltip
2 parents 0c441f0 + e3a1545 commit 94261e8

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

src/BootstrapBlazor.Server/Services/DemoLookupService.cs

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,55 @@
33
// See the LICENSE file in the project root for more information.
44
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
55

6+
using System.Collections.Concurrent;
7+
68
namespace Microsoft.Extensions.DependencyInjection;
79

810
/// <summary>
911
/// 演示网站示例数据注入服务实现类
1012
/// </summary>
1113
internal class DemoLookupService(IServiceProvider provider) : LookupServiceBase
1214
{
13-
private IServiceProvider Provider { get; } = provider;
15+
/// <summary>
16+
/// <inheritdoc/>
17+
/// </summary>
18+
/// <param name="key"></param>
19+
/// <param name="data"></param>
20+
/// <returns></returns>
21+
public override IEnumerable<SelectedItem>? GetItemsByKey(string? key, object? data) => null;
22+
23+
private static readonly ConcurrentDictionary<string, List<SelectedItem>> _cache = [];
1424

15-
public override IEnumerable<SelectedItem>? GetItemsByKey(string? key, object? data)
25+
/// <summary>
26+
/// <inheritdoc/>
27+
/// </summary>
28+
/// <param name="key"></param>
29+
/// <param name="data"></param>
30+
/// <returns></returns>
31+
public override async Task<IEnumerable<SelectedItem>?> GetItemsByKeyAsync(string? key, object? data)
1632
{
1733
IEnumerable<SelectedItem>? items = null;
1834
if (key == "Foo.Complete")
1935
{
20-
var localizer = Provider.GetRequiredService<IStringLocalizer<Foo>>();
21-
items = new List<SelectedItem>()
36+
// 使用缓存技术防止多次调用提高应用性能
37+
if (_cache.TryGetValue(key, out var value))
2238
{
23-
new() { Value = "True", Text = localizer["True"].Value },
24-
new() { Value = "False", Text = localizer["False"].Value }
25-
};
39+
items = value;
40+
}
41+
else
42+
{
43+
// 模拟异步延时实战中大概率从数据库中获得数据
44+
await Task.Delay(1);
45+
46+
var localizer = provider.GetRequiredService<IStringLocalizer<Foo>>();
47+
var v = new List<SelectedItem>()
48+
{
49+
new() { Value = "True", Text = localizer["True"].Value },
50+
new() { Value = "False", Text = localizer["False"].Value }
51+
};
52+
_cache.TryAdd(key, v);
53+
items = v;
54+
}
2655
}
2756
return items;
2857
}

0 commit comments

Comments
 (0)