导航

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.