using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using System; using System.Threading; using System.Threading.Tasks; using Volo.Abp.Localization; namespace Sanhe.Abp.Localization.Dynamic; public class DynamicLocalizationInitializeService : BackgroundService { protected ILocalizationStore Store { get; } protected AbpLocalizationOptions LocalizationOptions { get; } protected AbpLocalizationDynamicOptions DynamicOptions { get; } public DynamicLocalizationInitializeService( ILocalizationStore store, IOptions localizationOptions, IOptions dynamicOptions) { Store = store; DynamicOptions = dynamicOptions.Value; LocalizationOptions = localizationOptions.Value; } protected async override Task ExecuteAsync(CancellationToken stoppingToken) { try { foreach (var resource in LocalizationOptions.Resources) { foreach (var contributor in resource.Value.Contributors) { if (contributor.GetType().IsAssignableFrom(typeof(DynamicLocalizationResourceContributor))) { var resourceLocalizationDict = await Store .GetLocalizationDictionaryAsync( resource.Value.ResourceName, stoppingToken); DynamicOptions.AddOrUpdate(resource.Value.ResourceName, resourceLocalizationDict); } } } } catch (OperationCanceledException) { } // 忽略此异常 } }