下面是来自asp.net core的一些代码:
public static class EnvironmentVariablesExtensions {
...
public static IConfigurationBuilder AddEnvironmentVariables( this IConfigurationBuilder configurationBuilder, string prefix) {
configurationBuilder.Add(new EnvironmentVariablesConfigurationSource { Prefix = prefix });
return configurationBuilder;
}
}
public class EnvironmentVariablesConfigurationSource : IConfigurationSource {
public string Prefix { get; set; }
public IConfigurationProvider Build(IConfigurationBuilder builder) {
return new EnvironmentVariablesConfigurationProvider(Prefix);
}
}
public class EnvironmentVariablesConfigurationProvider : ConfigurationProvider {
...
}
public abstract class ConfigurationProvider : IConfigurationProvider {
...
}
public interface IConfigurationSource {
IConfigurationProvider Build(IConfigurationBuilder builder);
}
我的问题是,为什么 .net 团队使用 IConfigurationSource
来包装 IConfigurationProvider
?去掉IConfigurationSource
,替换任何需要IConfigurationSource
到IConfigurationProvider
的方法签名不是更简洁吗? IConfigurationSource
的目的是什么?