ChainedConfigurationProvider
Provides a chained implementation of IConfigurationProvider.
using Microsoft.Extensions.Primitives;
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace Microsoft.Extensions.Configuration
{
[NullableContext(1)]
[Nullable(0)]
public class ChainedConfigurationProvider : IConfigurationProvider, IDisposable
{
private readonly IConfiguration _config;
private readonly bool _shouldDisposeConfig;
public IConfiguration Configuration => _config;
public ChainedConfigurationProvider(ChainedConfigurationSource source)
{
ArgumentNullException.ThrowIfNull(source, "source");
IConfiguration configuration = source.Configuration;
if (configuration == null)
throw new ArgumentException(System.SR.Format(System.SR.InvalidNullArgument, "source.Configuration"), "source");
_config = configuration;
_shouldDisposeConfig = source.ShouldDisposeConfiguration;
}
public bool TryGet(string key, [Nullable(2)] out string value)
{
value = _config[key];
return !string.IsNullOrEmpty(value);
}
public void Set(string key, [Nullable(2)] string value)
{
_config[key] = value;
}
public IChangeToken GetReloadToken()
{
return _config.GetReloadToken();
}
public void Load()
{
}
public IEnumerable<string> GetChildKeys(IEnumerable<string> earlierKeys, [Nullable(2)] string parentPath)
{
object configuration;
if (parentPath != null) {
IConfiguration section = _config.GetSection(parentPath);
configuration = section;
} else
configuration = _config;
List<string> list = new List<string>();
foreach (IConfigurationSection child in ((IConfiguration)configuration).GetChildren()) {
list.Add(child.Key);
}
list.AddRange(earlierKeys);
list.Sort(ConfigurationKeyComparer.Comparison);
return list;
}
public void Dispose()
{
if (_shouldDisposeConfig)
(_config as IDisposable)?.Dispose();
}
}
}