Browse Source

fix: 修复DynamicResourceLocalizer

feat/cap
Hanpaopao 1 year ago
parent
commit
9f76a29f42
  1. 18
      aspnet-core/modules/LanguageManagement/src/Lion.AbpPro.LanguageManagement.Domain/DynamicResourceLocalizer.cs

18
aspnet-core/modules/LanguageManagement/src/Lion.AbpPro.LanguageManagement.Domain/DynamicResourceLocalizer.cs

@ -7,13 +7,13 @@ namespace Lion.AbpPro.LanguageManagement;
/// </summary> /// </summary>
public class DynamicResourceLocalizer : IDynamicResourceLocalizer, ISingletonDependency public class DynamicResourceLocalizer : IDynamicResourceLocalizer, ISingletonDependency
{ {
private readonly ILanguageTextManager _languageTextManager;
private readonly IDistributedCache<LanguageTextCacheItem> _distributedCache; private readonly IDistributedCache<LanguageTextCacheItem> _distributedCache;
private readonly IServiceScopeFactory _serviceScopeFactory;
public DynamicResourceLocalizer(ILanguageTextManager languageTextManager, IDistributedCache<LanguageTextCacheItem> distributedCache) public DynamicResourceLocalizer(IDistributedCache<LanguageTextCacheItem> distributedCache, IServiceScopeFactory serviceScopeFactory)
{ {
_languageTextManager = languageTextManager;
_distributedCache = distributedCache; _distributedCache = distributedCache;
_serviceScopeFactory = serviceScopeFactory;
} }
public LocalizedString GetOrNull(LocalizationResourceBase resource, string cultureName, string name) public LocalizedString GetOrNull(LocalizationResourceBase resource, string cultureName, string name)
@ -42,13 +42,17 @@ public class DynamicResourceLocalizer : IDynamicResourceLocalizer, ISingletonDep
protected virtual async Task<LanguageTextCacheItem> CreateCacheLanguageText(LocalizationResourceBase resource, string cultureName) protected virtual async Task<LanguageTextCacheItem> CreateCacheLanguageText(LocalizationResourceBase resource, string cultureName)
{ {
var languageTexts = await _languageTextManager.FindAsync(cultureName, resource.ResourceName);
var result = new LanguageTextCacheItem(); var result = new LanguageTextCacheItem();
foreach (var languageText in languageTexts) using (var scope = _serviceScopeFactory.CreateScope())
{ {
result.Dictionary[languageText.Name] = languageText.Value; var languageTexts = await scope.ServiceProvider
.GetRequiredService<ILanguageTextManager>()
.FindAsync(cultureName, resource.ResourceName);
foreach (var languageText in languageTexts)
{
result.Dictionary[languageText.Name] = languageText.Value;
}
} }
return result; return result;
} }
} }
Loading…
Cancel
Save