Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 36 additions & 7 deletions src/BootstrapBlazor.Server/Services/DemoLookupService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,55 @@
// See the LICENSE file in the project root for more information.
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone

using System.Collections.Concurrent;

namespace Microsoft.Extensions.DependencyInjection;

/// <summary>
/// 演示网站示例数据注入服务实现类
/// </summary>
internal class DemoLookupService(IServiceProvider provider) : LookupServiceBase
{
private IServiceProvider Provider { get; } = provider;
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <param name="key"></param>
/// <param name="data"></param>
/// <returns></returns>
public override IEnumerable<SelectedItem>? GetItemsByKey(string? key, object? data) => null;

private static readonly ConcurrentDictionary<string, List<SelectedItem>> _cache = [];

public override IEnumerable<SelectedItem>? GetItemsByKey(string? key, object? data)
/// <summary>
/// <inheritdoc/>
/// </summary>
/// <param name="key"></param>
/// <param name="data"></param>
/// <returns></returns>
public override async Task<IEnumerable<SelectedItem>?> GetItemsByKeyAsync(string? key, object? data)
{
IEnumerable<SelectedItem>? items = null;
if (key == "Foo.Complete")
{
var localizer = Provider.GetRequiredService<IStringLocalizer<Foo>>();
items = new List<SelectedItem>()
// 使用缓存技术防止多次调用提高应用性能
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<IStringLocalizer<Foo>>();
var v = new List<SelectedItem>()
{
new() { Value = "True", Text = localizer["True"].Value },
new() { Value = "False", Text = localizer["False"].Value }
};
_cache.TryAdd(key, v);
items = v;
}
}
return items;
}
Expand Down
Loading