为什么要使用 IConfigurationSource 来包装 IConfigurationProvider?

时间:2021-08-01 15:07:33

标签: c# .net asp.net-core design-patterns

下面是来自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,替换任何需要IConfigurationSourceIConfigurationProvider的方法签名不是更简洁吗? IConfigurationSource 的目的是什么?

0 个答案:

没有答案