diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs index d7a8b0ccb1..617d360898 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs @@ -11,23 +11,25 @@ namespace Volo.Abp.SettingManagement public class SettingManagementStore : ISettingManagementStore, ITransientDependency { protected IDistributedCache Cache { get; } + protected ISettingDefinitionManager SettingDefinitionManager { get; } protected ISettingRepository SettingRepository { get; } protected IGuidGenerator GuidGenerator { get; } public SettingManagementStore( ISettingRepository settingRepository, IGuidGenerator guidGenerator, - IDistributedCache cache) + IDistributedCache cache, + ISettingDefinitionManager settingDefinitionManager) { SettingRepository = settingRepository; GuidGenerator = guidGenerator; Cache = cache; + SettingDefinitionManager = settingDefinitionManager; } public virtual async Task GetOrNullAsync(string name, string providerName, string providerKey) { - var cacheItem = await GetCacheItemAsync(name, providerName, providerKey); - return cacheItem.Value; + return (await GetCacheItemAsync(name, providerName, providerKey)).Value; } public virtual async Task SetAsync(string name, string value, string providerName, string providerKey) @@ -70,16 +72,43 @@ namespace Volo.Abp.SettingManagement return cacheItem; } - var setting = await SettingRepository.FindAsync(name, providerName, providerKey); + cacheItem = new SettingCacheItem(null); + + await SetCacheItemsAsync(providerName, providerKey, name, cacheItem); + + return cacheItem; + } - cacheItem = new SettingCacheItem(setting?.Value); + private async Task SetCacheItemsAsync( + string providerName, + string providerKey, + string currentName, + SettingCacheItem currentCacheItem) + { + var settingDefinitions = SettingDefinitionManager.GetAll(); + var settingsDictionary = (await SettingRepository.GetListAsync(providerName, providerKey)) + .ToDictionary(s => s.Name, s => s.Value); + + var cacheItems = new List>(); + + foreach (var settingDefinition in settingDefinitions) + { + var settingValue = settingsDictionary.GetOrDefault(settingDefinition.Name); + + cacheItems.Add( + new KeyValuePair( + CalculateCacheKey(settingDefinition.Name, providerName, providerKey), + new SettingCacheItem(settingValue) + ) + ); - await Cache.SetAsync( - cacheKey, - cacheItem - ); + if (settingDefinition.Name == currentName) + { + currentCacheItem.Value = settingValue; + } + } - return cacheItem; + await Cache.SetManyAsync(cacheItems); } protected virtual string CalculateCacheKey(string name, string providerName, string providerKey)