asp.net core配置项示例代码

1、IConfigurationSource:表示一个配置源,其Build方法生成的IConfigurationProvider用于从当前配置源中读取key-value值(TryGey读取、Set设置键值、Load加载配置源到key-value集合、GetChildKey获取根据前缀key获取子key集合,并将earlierKeys添加到返回的字符串集合中)。IConfigurationProvider有直接实现类ConfigurationProvider,自定义IConfigurationProvider的时候,一般直接继承ConfigurationProvider类。

image
image

2、IConfigurationBuilder 用于 IConfigurationRoot(从IConfiguration继承) 对象,这也是最终供我们使用的key-value集合 。IConfigurationBuilder接口中 Sources 属性维护了一系列的 IConfigurationSource 列表。Properties 属性维护了和文件相关的字典。

image

image

image

static void Main(string[] args)
        {
            //1、创建IConfigurationBuilder
            IConfigurationBuilder builder = new ConfigurationBuilder();

            //2、创建配置源并添加到Builder中 IConfigurationSource

            //2、1系统自带的IConfigurationSource
            List<KeyValuePair<string, string>> InitialData = new List<KeyValuePair<string, string>>();
            InitialData.Add(new KeyValuePair<string, string>("name", "caoruipeng"));
            InitialData.Add(new KeyValuePair<string, string>("info:age", "29"));
            InitialData.Add(new KeyValuePair<string, string>("info:school", "北华大学"));
            InitialData.Add(new KeyValuePair<string, string>("user:name", "北华大学"));
            IConfigurationSource source = new MemoryConfigurationSource() { InitialData = InitialData };
            builder.Add(source);

            //2、2自定义IConfigurationSource
            IDictionary<string, string> data = new Dictionary<string, string>();
            data.Add("dbkey", "dbvalue");
            IConfigurationSource dbSource = new DBConfigurationSource(data);
            builder.Add(dbSource);

            //3、创建key-value集合
            IConfigurationRoot configuration = builder.Build();

            //4、获取key-value
            string value = configuration["name"];
            value = configuration.GetValue<string>("name");
            Console.WriteLine($"key:name,value:{value}");
            value = configuration.GetValue<string>("dbkey");
            Console.WriteLine($"key:dbkey,value:{value}");

            IConfigurationSection section = configuration.GetSection("info");
        }
    /// <summary>
    /// 自定义配置源
    /// </summary>
    public class DBConfigurationSource : IConfigurationSource
    {
        IDictionary<string, string> data = new Dictionary<string, string>();
        public DBConfigurationSource(IDictionary<string, string> data)
        {
            this.data = data;
        }
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new DBConfigurationProvider(data);
        }
    }
    /// <summary>
    /// 自定义配置源的Provider,用于从配置源中读取key-value值
    /// </summary>
    public class DBConfigurationProvider : ConfigurationProvider
    {
        public DBConfigurationProvider(IDictionary<string, string> data)
        {
            Data = data;
        }
        public override void Load()
        {
            base.Load();
        }
    }

3、系统自带的配置源 也就是IConfigurationSource的实现类

3.1 MemoryConfigurationSource:从内存中加载读取key-value。

3.2 ChainedConfigurationSource:直接维护了一个IConfiguration对象,通过IConfiguration加载读取key-value配置。

3.3 CommandLineConfigurationSource:从命令行加载读取key-value,从命令行读取命令,按 = 分割为key-value。

3.4 EnvironmentVariablesConfigurationSource:从环境变量中加载读取key-value。

3.5 FileConfigurationSource:抽象类,从文件中加载配置

3.5.1 JsonConfigurationSource : FileConfigurationSource:从json配置文件中加载配置。
3.5.2 IniConfigurationSource : FileConfigurationSource:从ini配置文件中加载配置
3.5.3 XmlConfigurationSource : FileConfigurationSource:从xml配置文件中加载配置

3.6 StreamConfigurationSource:抽象类,从Stream流中加载配置

3.6.1 JsonStreamConfigurationSource:StreamConfigurationSource:从Json流中加载配置。
3.6.2 XmlStreamConfigurationSource:StreamConfigurationSource:从xml流中加载配置。

3.3.3 IniStreamConfigurationSource:StreamConfigurationSource:从ini流中加载配置。

原文地址:https://www.cnblogs.com/caoruipeng/p/15689650.html