为何移除IConfigurationSource时ConfigurationManager需调用ReloadSources?
.NET 6 ConfigurationManager移除配置源为何要调用ReloadSources?
我在研究.NET 6的ConfigurationManager实现后,产生了一个疑问:为什么每次移除IConfigurationSource时,ConfigurationManager必须调用ReloadSources重建所有提供者,而非直接从IConfigurationProvider列表中移除对应的项?
从ConfigurationManager索引器的核心逻辑来看,它只是反向遍历提供者列表查找配置值:
internal static string? GetConfiguration(IList<IConfigurationProvider> providers, string key) { for (int i = providers.Count - 1; i >= 0; i--) { IConfigurationProvider provider = providers[i]; if (provider.TryGet(key, out string? value)) { return value; } } return null; }
我自己推测的原因是:部分配置源生成的IConfigurationProvider可能依赖于配置集合中已被移除的其他源,直接删除单个提供者会破坏这种依赖关系,导致配置无法正常工作。
内容的提问来源于stack exchange,提问作者Ivan Petrov
相关产品推荐
相关产品推荐

