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);
}
}
}