第二章 Configuration

TOC

一、导言

相对于老一代的配置系统,netcore有以下几个优点:

  1. 以前的系统只支持xml格式的配置文件,格式单一。而netcore支持多种格式的数据源,如json,xml,ini,memory,env
  2. 原来的配置信息key只能一维化配置,新一代的配置系统支持层级关系
  3. netcore可以实现配置的热加载

二、添加配置文件

2.1 数据源

  1. json
{
  "username": "xxx_json",
  "mysql": {
    "address": "192.168.1.6",
    "port": "1433"
  }
}
  1. xml
<?xml version="1.0" encoding="utf-8" ?>
<mydata>
  <username>xxx_xml</username>
  <mysql>
    <address>192.168.1.6</address>
    <port>1433</port>
  </mysql>
</mydata>

注意:添加的配置文件的CopyToOutputDirectory要设置为Copy always

2.2 代码实现

string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", EnvironmentVariableTarget.Machine);
var initData = new List<KeyValuePair<string, string>>();
initData.Add(new KeyValuePair<string, string>("username", "内存变量"));
IConfiguration configuration = new ConfigurationBuilder()
                                .SetBasePath(Environment.CurrentDirectory)//安装Microsoft.Extensions.Configuration.Json
                                .AddJsonFile($"appsettings.json",optional:true,reloadOnChange:true)//第三个参数为是否热加载
                                .AddXmlFile("appsettings.xml") //安装Microsoft.Extensions.Configuration.Xml
                                .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
                                .AddInMemoryCollection(initData)//添加内存数据源
                                .Build();
string username = configuration["username"];
var mySql = configuration.GetSection("MySql").Get<MySql>();//安装Microsoft.Extensions.Configuration.Binder
string host = configuration.GetSection("MySql").GetSection("Host").Value;
int port = configuration.GetValue<int>("MySql:Port", 0); //需安装Microsoft.Extensions.Configuration.Binder

注:添加的多个数据源如果配置信息key不相同,则可以同时存在;如果相同的话,以最后添加的那个数据源key的值为准

posted @ 2021-05-27 17:34  飞羽在天上  阅读(118)  评论(0)    收藏  举报