Browse Source

Introduce ISettingValueProviderManager.

pull/1460/head
Halil İbrahim Kalkan 7 years ago
parent
commit
73ec92f3af
  1. 2
      framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IModuleLifecycleContributor.cs
  2. 8
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionManager.cs
  3. 2
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionProvider.cs
  4. 9
      framework/src/Volo.Abp.Settings/Volo/Abp/Settings/ISettingValueProviderManager.cs
  5. 30
      framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs
  6. 2
      framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs
  7. 32
      framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProviderManager.cs

2
framework/src/Volo.Abp.Core/Volo/Abp/Modularity/IModuleLifecycleContributor.cs

@ -3,7 +3,7 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Modularity namespace Volo.Abp.Modularity
{ {
public interface IModuleLifecycleContributor : ISingletonDependency public interface IModuleLifecycleContributor : ITransientDependency
{ {
void Initialize([NotNull] ApplicationInitializationContext context, [NotNull] IAbpModule module); void Initialize([NotNull] ApplicationInitializationContext context, [NotNull] IAbpModule module);

8
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionManager.cs

@ -18,13 +18,13 @@ namespace Volo.Abp.Features
protected FeatureOptions Options { get; } protected FeatureOptions Options { get; }
private readonly IServiceProvider _serviceProvider; private readonly IServiceScopeFactory _serviceScopeFactory;
public FeatureDefinitionManager( public FeatureDefinitionManager(
IOptions<FeatureOptions> options, IOptions<FeatureOptions> options,
IServiceProvider serviceProvider) IServiceScopeFactory serviceScopeFactory)
{ {
_serviceProvider = serviceProvider; _serviceScopeFactory = serviceScopeFactory;
Options = options.Value; Options = options.Value;
_lazyFeatureDefinitions = new Lazy<Dictionary<string, FeatureDefinition>>( _lazyFeatureDefinitions = new Lazy<Dictionary<string, FeatureDefinition>>(
@ -98,7 +98,7 @@ namespace Volo.Abp.Features
{ {
var context = new FeatureDefinitionContext(); var context = new FeatureDefinitionContext();
using (var scope = _serviceProvider.CreateScope()) using (var scope = _serviceScopeFactory.CreateScope())
{ {
var providers = Options var providers = Options
.DefinitionProviders .DefinitionProviders

2
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureDefinitionProvider.cs

@ -2,7 +2,7 @@
namespace Volo.Abp.Features namespace Volo.Abp.Features
{ {
public abstract class FeatureDefinitionProvider : IFeatureDefinitionProvider, ISingletonDependency public abstract class FeatureDefinitionProvider : IFeatureDefinitionProvider, ITransientDependency
{ {
public abstract void Define(IFeatureDefinitionContext context); public abstract void Define(IFeatureDefinitionContext context);
} }

9
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<ISettingValueProvider> Providers { get; }
}
}

30
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.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Settings namespace Volo.Abp.Settings
@ -11,35 +8,24 @@ namespace Volo.Abp.Settings
public class SettingProvider : ISettingProvider, ITransientDependency public class SettingProvider : ISettingProvider, ITransientDependency
{ {
protected ISettingDefinitionManager SettingDefinitionManager { get; } protected ISettingDefinitionManager SettingDefinitionManager { get; }
protected Lazy<List<ISettingValueProvider>> Providers { get; }
protected ISettingEncryptionService SettingEncryptionService { get; } protected ISettingEncryptionService SettingEncryptionService { get; }
protected SettingOptions Options { get; } protected ISettingValueProviderManager SettingValueProviderManager { get; }
public SettingProvider( public SettingProvider(
IOptions<SettingOptions> options, ISettingDefinitionManager settingDefinitionManager,
IServiceProvider serviceProvider, ISettingEncryptionService settingEncryptionService,
ISettingDefinitionManager settingDefinitionManager, ISettingValueProviderManager settingValueProviderManager)
ISettingEncryptionService settingEncryptionService)
{ {
SettingDefinitionManager = settingDefinitionManager; SettingDefinitionManager = settingDefinitionManager;
SettingEncryptionService = settingEncryptionService; SettingEncryptionService = settingEncryptionService;
SettingValueProviderManager = settingValueProviderManager;
Options = options.Value;
Providers = new Lazy<List<ISettingValueProvider>>(
() => Options
.ValueProviders
.Select(type => serviceProvider.GetRequiredService(type) as ISettingValueProvider)
.ToList(),
true
);
} }
public virtual async Task<string> GetOrNullAsync(string name) public virtual async Task<string> GetOrNullAsync(string name)
{ {
var setting = SettingDefinitionManager.Get(name); var setting = SettingDefinitionManager.Get(name);
var providers = Enumerable var providers = Enumerable
.Reverse(Providers.Value); .Reverse(SettingValueProviderManager.Providers);
if (setting.Providers.Any()) if (setting.Providers.Any())
{ {
@ -62,7 +48,7 @@ namespace Volo.Abp.Settings
var settingValues = new Dictionary<string, SettingValue>(); var settingValues = new Dictionary<string, SettingValue>();
var settingDefinitions = SettingDefinitionManager.GetAll(); var settingDefinitions = SettingDefinitionManager.GetAll();
foreach (var provider in Providers.Value) foreach (var provider in SettingValueProviderManager.Providers)
{ {
foreach (var setting in settingDefinitions) foreach (var setting in settingDefinitions)
{ {

2
framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingValueProvider.cs

@ -3,7 +3,7 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Settings namespace Volo.Abp.Settings
{ {
public abstract class SettingValueProvider : ISettingValueProvider, ISingletonDependency //TODO: to transient? public abstract class SettingValueProvider : ISettingValueProvider, ITransientDependency
{ {
public abstract string Name { get; } public abstract string Name { get; }

32
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<ISettingValueProvider> Providers => _lazyProviders.Value;
protected SettingOptions Options { get; }
private readonly Lazy<List<ISettingValueProvider>> _lazyProviders;
public SettingValueProviderManager(
IServiceProvider serviceProvider,
IOptions<SettingOptions> options)
{
Options = options.Value;
_lazyProviders = new Lazy<List<ISettingValueProvider>>(
() => Options
.ValueProviders
.Select(type => serviceProvider.GetRequiredService(type) as ISettingValueProvider)
.ToList(),
true
);
}
}
}
Loading…
Cancel
Save