From 913d46b78bfc536380e1c1d03c5718ec62a5c286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 13 Nov 2019 10:22:45 +0300 Subject: [PATCH] Resolved #2159: Create Configuration setting value provider. --- docs/en/Modules/Setting-Management.md | 3 +- docs/en/Settings.md | 3 +- .../Volo/Abp/Settings/AbpSettingsModule.cs | 1 + .../ConfigurationSettingValueProvider.cs | 27 +++++++++++++++ .../AbpSettingManagementDomainModule.cs | 1 + .../ConfigurationSettingManagementProvider.cs | 34 +++++++++++++++++++ ...figurationValueSettingManagerExtensions.cs | 20 +++++++++++ ...ultValueSettingManagementProvider_Tests.cs | 5 +-- 8 files changed, 88 insertions(+), 6 deletions(-) create mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ConfigurationSettingValueProvider.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationSettingManagementProvider.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationValueSettingManagerExtensions.cs diff --git a/docs/en/Modules/Setting-Management.md b/docs/en/Modules/Setting-Management.md index 7a4f2a729b..39e8f8a0df 100644 --- a/docs/en/Modules/Setting-Management.md +++ b/docs/en/Modules/Setting-Management.md @@ -73,9 +73,10 @@ Setting values are cached using the [distributed cache](../Caching.md) system. A ## Setting Management Providers -Setting Management module is extensible, just like the [setting system](../Settings.md). You can extend it by defining setting management providers. There are four pre-built setting management providers registered by the order below: +Setting Management module is extensible, just like the [setting system](../Settings.md). You can extend it by defining setting management providers. There are 5 pre-built setting management providers registered by the order below: * `DefaultValueSettingManagementProvider`: Gets the value from the default value of the setting definition. It can not set the default value since default values are hard-coded on the setting definition. +* `ConfigurationSettingManagementProvider`: Gets the value from the [IConfiguration service](Configuration.md). It can not set the configuration value because it is not possible to change the configuration values on runtime. * `GlobalSettingManagementProvider`: Gets or sets the global (system-wide) value for a setting. * `TenantSettingManagementProvider`: Gets or sets the setting value for a tenant. * `UserSettingManagementProvider`: Gets the setting value for a user. diff --git a/docs/en/Settings.md b/docs/en/Settings.md index 28b1b370ee..c9b3e9b64e 100644 --- a/docs/en/Settings.md +++ b/docs/en/Settings.md @@ -106,9 +106,10 @@ Setting system is extensible, you can extend it by defining setting value provid `ISettingProvider` uses the setting value providers to obtain a setting value. It fallbacks to the next value provider if a value provider can not get the setting value. -There are four pre-built setting value providers registered by the order below: +There are 5 pre-built setting value providers registered by the order below: * `DefaultValueSettingValueProvider`: Gets the value from the default value of the setting definition, if set (see the SettingDefinition section above). +* `ConfigurationSettingValueProvider`: Gets the value from the [IConfiguration service](Configuration.md). * `GlobalSettingValueProvider`: Gets the global (system-wide) value for a setting, if set. * `TenantSettingValueProvider`: Gets the setting value for the current tenant, if set (see the [multi-tenancy](Multi-Tenancy.md) document). * `UserSettingValueProvider`: Gets the setting value for the current user, if set (see the [current user](CurrentUser.md) document). diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs index 48a85dd7d9..716d8dd726 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs @@ -25,6 +25,7 @@ namespace Volo.Abp.Settings Configure(options => { options.ValueProviders.Add(); + options.ValueProviders.Add(); options.ValueProviders.Add(); options.ValueProviders.Add(); options.ValueProviders.Add(); diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ConfigurationSettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ConfigurationSettingValueProvider.cs new file mode 100644 index 0000000000..70f2a6c346 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ConfigurationSettingValueProvider.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Settings +{ + public class ConfigurationSettingValueProvider : ISettingValueProvider, ITransientDependency + { + public const string ConfigurationNamePrefix = "Settings:"; + + public const string ProviderName = "C"; + + public string Name => ProviderName; + + protected IConfiguration Configuration { get; } + + public ConfigurationSettingValueProvider(IConfiguration configuration) + { + Configuration = configuration; + } + + public virtual Task GetOrNullAsync(SettingDefinition setting) + { + return Task.FromResult(Configuration[ConfigurationNamePrefix + setting.Name]); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs index 237b226b07..64715d6196 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/AbpSettingManagementDomainModule.cs @@ -18,6 +18,7 @@ namespace Volo.Abp.SettingManagement Configure(options => { options.Providers.Add(); + options.Providers.Add(); options.Providers.Add(); options.Providers.Add(); options.Providers.Add(); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationSettingManagementProvider.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationSettingManagementProvider.cs new file mode 100644 index 0000000000..c2f7654fd8 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationSettingManagementProvider.cs @@ -0,0 +1,34 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public class ConfigurationSettingManagementProvider : ISettingManagementProvider, ITransientDependency + { + public string Name => ConfigurationSettingValueProvider.ProviderName; + + protected IConfiguration Configuration { get; } + + public ConfigurationSettingManagementProvider(IConfiguration configuration) + { + Configuration = configuration; + } + + public Task GetOrNullAsync(SettingDefinition setting, string providerKey) + { + return Task.FromResult(Configuration[ConfigurationSettingValueProvider.ConfigurationNamePrefix + setting.Name]); + } + + public Task SetAsync(SettingDefinition setting, string value, string providerKey) + { + throw new AbpException($"Can not set a setting value to the application configuration."); + } + + public Task ClearAsync(SettingDefinition setting, string providerKey) + { + throw new AbpException($"Can not set a setting value to the application configuration."); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationValueSettingManagerExtensions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationValueSettingManagerExtensions.cs new file mode 100644 index 0000000000..2c1af4b107 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationValueSettingManagerExtensions.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Settings; + +namespace Volo.Abp.SettingManagement +{ + public static class ConfigurationValueSettingManagerExtensions + { + public static Task GetOrNullConfigurationAsync(this ISettingManager settingManager, [NotNull] string name, bool fallback = true) + { + return settingManager.GetOrNullAsync(name, ConfigurationSettingValueProvider.ProviderName, null, fallback); + } + + public static Task> GetAllConfigurationAsync(this ISettingManager settingManager, bool fallback = true) + { + return settingManager.GetAllAsync(ConfigurationSettingValueProvider.ProviderName, null, fallback); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider_Tests.cs index d19f587a78..20263a73c9 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider_Tests.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Threading.Tasks; +using System.Threading.Tasks; using Shouldly; using Volo.Abp.Settings; using Xunit;