11 | 文件配置提供程序:自由选择配置的格式
文件配置提供程序
- Microsoft.Extensions.Configuration.Ini
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.Configuration.NewtonsoftJson
- Microsoft.Extensions.Configuration.Xml
- Microsoft.Extensions.Configuration.UserSecrets
特性
- 指定文件是否可选、必选
- 指定是否监视文件的变更,也就意味着如果文件变更我们是可以知道的
示例
新建控制台应用程序??添加包
添加一个appsetting.json
文件在项目中
将json文件设置为:右键??属性??复制到输出目录:始终复制
using Microsoft.Extensions.Configuration;
using System;
namespace ConfigurationFileDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
var root = builder.AddJsonFile("appsettings.json").Build();
Console.WriteLine($"Key1 : {root["key1"]}");
Console.WriteLine($"Key2 : {root["key2"]}");
}
}
}
输出:
AddJsonFile()
方法由其它两个参数,optional
和reloadOnChange
optional参数默认是false,功能是当文件不存在时是否报错。
reloadOnChange
****参数默认是true,功能是每次我们文件变更了,它会去读取我们新的文件。
这里,我们
将代码修改为:
using Microsoft.Extensions.Configuration;
using System;
namespace ConfigurationFileDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
var root = builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
Console.WriteLine($"Key1 : {root["key1"]}");
Console.WriteLine($"Key2 : {root["key2"]}");
Console.ReadKey();
Console.WriteLine($"Key1 : {root["key1"]}");
Console.WriteLine($"Key2 : {root["key2"]}");
Console.ReadKey();
}
}
}
然后运行,代码会在ReadKey()
处停住,之后我们去修改Json文件,将Key1
的Value1
修改为NewValue1
,然后保存。
输出:
然后我们再看一看ini文件的操作
首先创建一个appsetting.ini
操作同上 ,输入内容:
将代码修改为
using Microsoft.Extensions.Configuration;
using System;
namespace ConfigurationFileDemo
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder();
var root = builder
.AddJsonFile("appsettings.json")
.AddIniFile("appsettings.ini")
.Build();
Console.WriteLine($"Key1 : {root["key1"]}");
Console.WriteLine($"Key2 : {root["key2"]}");
Console.WriteLine($"Key3 : {root["key3"]}");
Console.ReadKey();
}
}
}
输出:
我们发现Key3输出的是ini文件的值,说明Builder中添加我们的配置源是有顺序关系的,后添加的配置会覆盖先添加的配置。