04-007 Configuration 之 IConfigurationSourceContainer 及其 Extensions
Posted on 2015-03-17 11:36 DotNet1010 阅读(229) 评论(0) 收藏 举报 public interface IConfigurationSourceContainer : IConfiguration, IEnumerable<IConfigurationSource>
{
IConfigurationSourceContainer Add(IConfigurationSource configurationSource);
}
看一下具体在Configuration中的实现:
private readonly IList<IConfigurationSource> _sources = new List<IConfigurationSource>();
private readonly IList<ICommitableConfigurationSource> _committableSources = new List<ICommitableConfigurationSource>();
public IConfigurationSourceContainer Add(IConfigurationSource configurationSource)
{
configurationSource.Load();
return AddLoadedSource(configurationSource);
}
internal IConfigurationSourceContainer AddLoadedSource(IConfigurationSource configurationSource)
{
_sources.Add(configurationSource);
if (configurationSource is ICommitableConfigurationSource)
{
_committableSources.Add(configurationSource as ICommitableConfigurationSource);
}
return this;
}
其中 ICommitableConfigurationSource 提供了修改Value可以保存的功能:
具体实现类有以下三个:
IniFileConfigurationSource
JSONConfigurationSource
XmlConfigurationSource
在看一下扩展方法:
#if NET45 || ASPNET50 || ASPNETCORE50
public static IConfigurationSourceContainer AddIniFile(this IConfigurationSourceContainer configuration, string path)
{
configuration.Add(new IniFileConfigurationSource(path));
return configuration;
}
#endif
public static IConfigurationSourceContainer AddCommandLine(this IConfigurationSourceContainer configuration, string[] args)
{
configuration.Add(new CommandLineConfigurationSource(args));
return configuration;
}
public static IConfigurationSourceContainer AddEnvironmentVariables(this IConfigurationSourceContainer configuration)
{
configuration.Add(new EnvironmentVariablesConfigurationSource());
return configuration;
}
public static IConfigurationSourceContainer AddEnvironmentVariables(this IConfigurationSourceContainer configuration, string prefix)
{
configuration.Add(new EnvironmentVariablesConfigurationSource(prefix));
return configuration;
}
public static IConfigurationSourceContainer AddJsonFile(this IConfigurationSourceContainer configuration, string path)
{
configuration.Add(new JsonConfigurationSource(path));
return configuration;
}
public static IConfigurationSourceContainer AddXmlFile(this IConfigurationSourceContainer configuration, string path)
{
configuration.Add(new XmlConfigurationSource(path));
return configuration;
}
具体使用的例子:
Configuration = new Configuration()
.AddJsonFile("config.json")
.AddEnvironmentVariables(); //All environment variables in the process's context flow in as configuration values.
浙公网安备 33010602011771号