using System; using System.Collections.Generic; using System.Collections.Immutable; using Abp.Configuration.Startup; using Abp.Dependency; namespace Abp.Configuration { /// /// Implements . /// internal class SettingDefinitionManager : ISettingDefinitionManager, ISingletonDependency { private readonly IIocManager _iocManager; private readonly ISettingsConfiguration _settingsConfiguration; private readonly IDictionary _settings; /// /// Constructor. /// public SettingDefinitionManager(IIocManager iocManager, ISettingsConfiguration settingsConfiguration) { _iocManager = iocManager; _settingsConfiguration = settingsConfiguration; _settings = new Dictionary(); } public void Initialize() { var context = new SettingDefinitionProviderContext(this); foreach (var providerType in _settingsConfiguration.Providers) { using (var provider = CreateProvider(providerType)) { foreach (var settings in provider.Object.GetSettingDefinitions(context)) { _settings[settings.Name] = settings; } } } } public SettingDefinition GetSettingDefinition(string name) { if (!_settings.TryGetValue(name, out var settingDefinition)) { throw new AbpException("There is no setting defined with name: " + name); } return settingDefinition; } public IReadOnlyList GetAllSettingDefinitions() { return _settings.Values.ToImmutableList(); } private IDisposableDependencyObjectWrapper CreateProvider(Type providerType) { return _iocManager.ResolveAsDisposable(providerType); } } }