<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.0-preview.6.25358.103" />

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