|
|
|
@ -44,33 +44,33 @@ namespace Volo.Abp.Settings |
|
|
|
return GetOrNullInternalAsync(name, null, null); |
|
|
|
} |
|
|
|
|
|
|
|
public virtual Task<string> GetOrNullAsync(string name, string entityType, string entityId, bool fallback = true) |
|
|
|
public virtual Task<string> GetOrNullAsync(string name, string providerName, string providerKey, bool fallback = true) |
|
|
|
{ |
|
|
|
Check.NotNull(name, nameof(name)); |
|
|
|
Check.NotNull(entityType, nameof(entityType)); |
|
|
|
Check.NotNull(providerName, nameof(providerName)); |
|
|
|
|
|
|
|
return GetOrNullInternalAsync(name, entityType, entityId, fallback); |
|
|
|
return GetOrNullInternalAsync(name, providerName, providerKey, fallback); |
|
|
|
} |
|
|
|
|
|
|
|
public virtual async Task<string> GetOrNullInternalAsync(string name, string entityType, string entityId, bool fallback = true) |
|
|
|
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 (entityType != null) |
|
|
|
if (providerName != null) |
|
|
|
{ |
|
|
|
providers = providers.SkipWhile(c => c.EntityType != entityType); |
|
|
|
providers = providers.SkipWhile(c => c.Name != providerName); |
|
|
|
} |
|
|
|
|
|
|
|
if (!fallback || !setting.IsInherited) |
|
|
|
{ |
|
|
|
providers = providers.TakeWhile(c => c.EntityType == entityType); |
|
|
|
providers = providers.TakeWhile(c => c.Name == providerName); |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var provider in providers) |
|
|
|
{ |
|
|
|
var value = await provider.GetOrNullAsync(setting, entityId); |
|
|
|
var value = await provider.GetOrNullAsync(setting, providerKey); |
|
|
|
if (value != null) |
|
|
|
{ |
|
|
|
return value; |
|
|
|
@ -100,18 +100,18 @@ namespace Volo.Abp.Settings |
|
|
|
return settingValues.Values.ToList(); |
|
|
|
} |
|
|
|
|
|
|
|
public virtual async Task<List<SettingValue>> GetAllAsync(string entityType, string entityId, bool fallback = true) |
|
|
|
public virtual async Task<List<SettingValue>> GetAllAsync(string providerName, string providerKey, bool fallback = true) |
|
|
|
{ |
|
|
|
Check.NotNull(entityType, nameof(entityType)); |
|
|
|
Check.NotNull(providerName, nameof(providerName)); |
|
|
|
|
|
|
|
var settingValues = new Dictionary<string, SettingValue>(); |
|
|
|
var settingDefinitions = SettingDefinitionManager.GetAll(); |
|
|
|
var providers = Enumerable.Reverse(Providers.Value) |
|
|
|
.SkipWhile(c => c.EntityType != entityType); |
|
|
|
.SkipWhile(c => c.Name != providerName); |
|
|
|
|
|
|
|
if (!fallback) |
|
|
|
{ |
|
|
|
providers = providers.TakeWhile(c => c.EntityType == entityType); |
|
|
|
providers = providers.TakeWhile(c => c.Name == providerName); |
|
|
|
} |
|
|
|
|
|
|
|
var providerList = providers.Reverse().ToList(); |
|
|
|
@ -124,7 +124,7 @@ namespace Volo.Abp.Settings |
|
|
|
{ |
|
|
|
foreach (var provider in providerList) |
|
|
|
{ |
|
|
|
var value = await provider.GetOrNullAsync(setting, entityId); |
|
|
|
var value = await provider.GetOrNullAsync(setting, providerKey); |
|
|
|
if (value != null) |
|
|
|
{ |
|
|
|
settingValues[setting.Name] = new SettingValue(setting.Name, value); |
|
|
|
@ -135,7 +135,7 @@ namespace Volo.Abp.Settings |
|
|
|
{ |
|
|
|
settingValues[setting.Name] = new SettingValue( |
|
|
|
setting.Name, |
|
|
|
await providerList[0].GetOrNullAsync(setting, entityId) |
|
|
|
await providerList[0].GetOrNullAsync(setting, providerKey) |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -144,16 +144,16 @@ namespace Volo.Abp.Settings |
|
|
|
return settingValues.Values.ToList(); |
|
|
|
} |
|
|
|
|
|
|
|
public virtual async Task SetAsync(string name, string value, string entityType, string entityId, bool forceToSet = false) |
|
|
|
public virtual async Task SetAsync(string name, string value, string providerName, string providerKey, bool forceToSet = false) |
|
|
|
{ |
|
|
|
Check.NotNull(name, nameof(name)); |
|
|
|
Check.NotNull(entityType, nameof(entityType)); |
|
|
|
Check.NotNull(providerName, nameof(providerName)); |
|
|
|
|
|
|
|
var setting = SettingDefinitionManager.Get(name); |
|
|
|
|
|
|
|
var providers = Enumerable |
|
|
|
.Reverse(Providers.Value) |
|
|
|
.SkipWhile(p => p.EntityType != entityType) |
|
|
|
.SkipWhile(p => p.Name != providerName) |
|
|
|
.ToList(); |
|
|
|
|
|
|
|
if (!providers.Any()) |
|
|
|
@ -164,7 +164,7 @@ namespace Volo.Abp.Settings |
|
|
|
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].EntityType, entityId); |
|
|
|
var fallbackValue = await GetOrNullInternalAsync(name, providers[1].Name, providerKey); |
|
|
|
if (fallbackValue == value) |
|
|
|
{ |
|
|
|
value = null; |
|
|
|
@ -172,21 +172,21 @@ namespace Volo.Abp.Settings |
|
|
|
} |
|
|
|
|
|
|
|
providers = providers |
|
|
|
.TakeWhile(p => p.EntityType == entityType) |
|
|
|
.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, entityId); |
|
|
|
await provider.ClearAsync(setting, providerKey); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
foreach (var provider in providers) |
|
|
|
{ |
|
|
|
await provider.SetAsync(setting, value, entityId); |
|
|
|
await provider.SetAsync(setting, value, providerKey); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|