From 73ec92f3af01b62907e61ed2506879e4fe8b484c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 8 Jul 2019 15:22:33 +0300 Subject: [PATCH] Introduce ISettingValueProviderManager. --- .../Modularity/IModuleLifecycleContributor.cs | 2 +- .../Abp/Features/FeatureDefinitionManager.cs | 8 ++--- .../Abp/Features/FeatureDefinitionProvider.cs | 2 +- .../Settings/ISettingValueProviderManager.cs | 9 ++++++ .../Volo/Abp/Settings/SettingProvider.cs | 30 +++++------------ .../Volo/Abp/Settings/SettingValueProvider.cs | 2 +- .../Settings/SettingValueProviderManager.cs | 32 +++++++++++++++++++ 7 files changed, 56 insertions(+), 29 deletions(-) create mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProviderManager.cs create mode 100644 framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProviderManager.cs diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IModuleLifecycleContributor.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IModuleLifecycleContributor.cs index 7c1931310f..54cf65f15e 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IModuleLifecycleContributor.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IModuleLifecycleContributor.cs @@ -3,7 +3,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Modularity { - public interface IModuleLifecycleContributor : ISingletonDependency + public interface IModuleLifecycleContributor : ITransientDependency { void Initialize([NotNull] ApplicationInitializationContext context, [NotNull] IAbpModule module); diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionManager.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionManager.cs index 13d15ac95e..84b9088a3d 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionManager.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionManager.cs @@ -18,13 +18,13 @@ namespace Volo.Abp.Features protected FeatureOptions Options { get; } - private readonly IServiceProvider _serviceProvider; + private readonly IServiceScopeFactory _serviceScopeFactory; public FeatureDefinitionManager( IOptions options, - IServiceProvider serviceProvider) + IServiceScopeFactory serviceScopeFactory) { - _serviceProvider = serviceProvider; + _serviceScopeFactory = serviceScopeFactory; Options = options.Value; _lazyFeatureDefinitions = new Lazy>( @@ -98,7 +98,7 @@ namespace Volo.Abp.Features { var context = new FeatureDefinitionContext(); - using (var scope = _serviceProvider.CreateScope()) + using (var scope = _serviceScopeFactory.CreateScope()) { var providers = Options .DefinitionProviders diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionProvider.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionProvider.cs index f3c7a7f9b0..3ba5f7ca9b 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionProvider.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionProvider.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.Features { - public abstract class FeatureDefinitionProvider : IFeatureDefinitionProvider, ISingletonDependency + public abstract class FeatureDefinitionProvider : IFeatureDefinitionProvider, ITransientDependency { public abstract void Define(IFeatureDefinitionContext context); } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProviderManager.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProviderManager.cs new file mode 100644 index 0000000000..ab0d3b605f --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProviderManager.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Abp.Settings +{ + public interface ISettingValueProviderManager + { + List Providers { get; } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs index 3629c9eadb..6f5372a4cf 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs @@ -1,9 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Settings @@ -11,35 +8,24 @@ namespace Volo.Abp.Settings public class SettingProvider : ISettingProvider, ITransientDependency { protected ISettingDefinitionManager SettingDefinitionManager { get; } - protected Lazy> Providers { get; } protected ISettingEncryptionService SettingEncryptionService { get; } - protected SettingOptions Options { get; } + protected ISettingValueProviderManager SettingValueProviderManager { get; } public SettingProvider( - IOptions options, - IServiceProvider serviceProvider, - ISettingDefinitionManager settingDefinitionManager, - ISettingEncryptionService settingEncryptionService) + ISettingDefinitionManager settingDefinitionManager, + ISettingEncryptionService settingEncryptionService, + ISettingValueProviderManager settingValueProviderManager) { SettingDefinitionManager = settingDefinitionManager; SettingEncryptionService = settingEncryptionService; - - Options = options.Value; - - Providers = new Lazy>( - () => Options - .ValueProviders - .Select(type => serviceProvider.GetRequiredService(type) as ISettingValueProvider) - .ToList(), - true - ); + SettingValueProviderManager = settingValueProviderManager; } public virtual async Task GetOrNullAsync(string name) { var setting = SettingDefinitionManager.Get(name); var providers = Enumerable - .Reverse(Providers.Value); + .Reverse(SettingValueProviderManager.Providers); if (setting.Providers.Any()) { @@ -62,7 +48,7 @@ namespace Volo.Abp.Settings var settingValues = new Dictionary(); var settingDefinitions = SettingDefinitionManager.GetAll(); - foreach (var provider in Providers.Value) + foreach (var provider in SettingValueProviderManager.Providers) { foreach (var setting in settingDefinitions) { diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs index 0a383a3e3b..91be8549ab 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs @@ -3,7 +3,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Settings { - public abstract class SettingValueProvider : ISettingValueProvider, ISingletonDependency //TODO: to transient? + public abstract class SettingValueProvider : ISettingValueProvider, ITransientDependency { public abstract string Name { get; } diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProviderManager.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProviderManager.cs new file mode 100644 index 0000000000..ce10a20a31 --- /dev/null +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProviderManager.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Settings +{ + public class SettingValueProviderManager : ISettingValueProviderManager, ISingletonDependency + { + public List Providers => _lazyProviders.Value; + protected SettingOptions Options { get; } + private readonly Lazy> _lazyProviders; + + public SettingValueProviderManager( + IServiceProvider serviceProvider, + IOptions options) + { + + Options = options.Value; + + _lazyProviders = new Lazy>( + () => Options + .ValueProviders + .Select(type => serviceProvider.GetRequiredService(type) as ISettingValueProvider) + .ToList(), + true + ); + } + } +} \ No newline at end of file