第二章 Configuration
一、导言
相对于老一代的配置系统,netcore有以下几个优点:
- 以前的系统只支持xml格式的配置文件,格式单一。而netcore支持多种格式的数据源,如json,xml,ini,memory,env
- 原来的配置信息key只能一维化配置,新一代的配置系统支持层级关系
- netcore可以实现配置的热加载
二、添加配置文件
2.1 数据源
- json
{
"username": "xxx_json",
"mysql": {
"address": "192.168.1.6",
"port": "1433"
}
}- 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的值为准

浙公网安备 33010602011771号