InternalConfigurationRootExtensions
Extensions method for IConfigurationRoot
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
namespace Microsoft.Extensions.Configuration
{
internal static class InternalConfigurationRootExtensions
{
[NullableContext(1)]
internal static IEnumerable<IConfigurationSection> GetChildrenImplementation(this IConfigurationRoot root, [Nullable(2)] string path)
{
using (ReferenceCountedProviders referenceCountedProviders = (root as ConfigurationManager)?.GetProvidersReference()) {
IEnumerable<IConfigurationProvider> enumerable = referenceCountedProviders?.Providers;
IEnumerable<IConfigurationSection> enumerable2 = from key in (enumerable ?? root.Providers).Aggregate(Enumerable.Empty<string>(), (IEnumerable<string> seed, IConfigurationProvider source) => source.GetChildKeys(seed, path)).Distinct(StringComparer.OrdinalIgnoreCase)
select root.GetSection((path == null) ? key : (path + ConfigurationPath.KeyDelimiter + key));
if (referenceCountedProviders != null)
return enumerable2.ToList();
return enumerable2;
}
}
}
}