protected virtual async Task <string> GetOrNullInternalAsync(string name, string providerName, string providerKey, bool fallback = true) { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(Providers.Value); if (providerName != null) { providers = providers.SkipWhile(c => c.Name != providerName); } if (!fallback || !setting.IsInherited) { providers = providers.TakeWhile(c => c.Name == providerName); } var value = await GetOrNullValueFromProvidersAsync(providerKey, providers, setting); if (setting.IsEncrypted) { value = SettingEncryptionService.Decrypt(setting, value); } return(value); }
public virtual async Task <string> GetOrNullInternalAsync(string name, string providerName, string providerKey, bool fallback = true) { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(Providers.Value); if (providerName != null) { providers = providers.SkipWhile(c => c.Name != providerName); } if (!fallback || !setting.IsInherited) { providers = providers.TakeWhile(c => c.Name == providerName); } foreach (var provider in providers) { var value = await provider.GetOrNullAsync(setting, providerKey); if (value != null) { return(value); } } return(null); }
public virtual async Task SetAsync(string name, string value, string providerName, string providerKey, bool forceToSet = false) { Check.NotNull(name, nameof(name)); Check.NotNull(providerName, nameof(providerName)); var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(Providers.Value) .SkipWhile(p => p.Name != providerName) .ToList(); if (!providers.Any()) { return; } if (setting.IsEncrypted) { value = SettingEncryptionService.Encrypt(setting, value); } if (providers.Count > 1 && !forceToSet && setting.IsInherited && value != null) { //Clear the value if it's same as it's fallback value var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, providerKey); if (fallbackValue == value) { value = null; } } providers = providers .TakeWhile(p => p.Name == providerName) .ToList(); //Getting list for case of there are more than one provider with same EntityType if (value == null) { foreach (var provider in providers) { await provider.ClearAsync(setting, providerKey); } } else { foreach (var provider in providers) { await provider.SetAsync(setting, value, providerKey); } } }
public virtual async Task <string> GetOrNullAsync(string name) { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable .Reverse(Providers.Value); if (setting.Providers.Any()) { providers = providers.Where(p => setting.Providers.Contains(p.Name)); } //TODO: How to implement setting.IsInherited? var value = await GetOrNullValueFromProvidersAsync(providers, setting); if (setting.IsEncrypted) { value = SettingEncryptionService.Decrypt(setting, value); } return(value); }