杨中科:
通过Nuget,安装三个包 :
Microsoft.Extensions.Configuration,
Microsoft.Extensions.Configuration.Abstractions,
Microsoft.Extensions.Configuration.Json
并引用 : using Microsoft.Extensions.Configuration;
相关代码:
static void Main(string[] args)
{
//读取配置文件==> 如果被读取的文件必须调整为可以被复制,如果不可以被复制则会导致,
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile("Config.json",optional:true,reloadOnChange:true);
IConfigurationRoot configuration= builder.Build();
string name=configuration["name"];
Console.WriteLine(name);
string add=configuration.GetSection("proxy:address").Value;
Console.WriteLine(add);
Console.Read();
}
要介绍原理,先看与配置相关的几个接口及它们的实现类:
IConfigurationBuilder
配置建造者接口,我们使用它去创建配置对象,有一个实现类:ConfigurationBuilder
IConfiguration
表示配置集合的接口,一般的,程序通过从DI获取IConfiguration接口的实例来获取配置
IConfigurationRoot
IConfiguration的子接口,表示配置的根节点,换句话说,IConfigurationBuilder创建的第一个配置对象就是IConfigurationRoot接口对象,它的实现类是:ConfigurationRoot
IConfigurationSection
IConfiguration的子接口,表示配置的一个节点,包含节点名、节点路径、值等等,配置节点分隔默认是冒号(:),它的实现类是:ConfigurationSection
IConfigurationSource
配置来源接口,IConfigurationSource接口的实现类都很简单,主要用于结合Options创建配置提供者IConfigurationProvider,一般的,它的作用可以认为就是接收参数,然后在创建IConfigurationProvider时将参数传进去。
但是在读取来自文件的配置时,推荐继承抽象类:FileConfigurationSource ,其它的就直接实现 IConfigurationSource 就可以了,然后添加到 IConfigurationBuilder 的配置源中去。
IConfigurationProvider
配置信息的具体提供者,这个就是提供配置的获取、更新等等操作的接口,有两个重要的抽象类:ConfigurationProvider 和 FileConfigurationProvider
一般的,如果我们需要集成自己的配置,需要实现这个 IConfigurationSource 接口和 IConfigurationProvider 接口,如果我们的配置和文件有关,建议通过继承 FileConfigurationSource 两个 FileConfigurationProvider 两个抽象类来实现 IConfigurationSource 和 IConfigurationProvider接口,因为这两个抽象类已经提供了一些我们可能需要的功能,比如,它们可以监听文件状态,如果文件内容被修改,则可以重新加载配置。如果配置不来自文件,配置来源可以直接实现 IConfigurationSource 接口,而通过继承 ConfigurationProvider 来实现 IConfigurationProvider 接口。
于是乎,将它们串接起来,流程就是这样的:
1、提供一个实现了 IConfigurationProvider 接口的配置提供类,它需要提供配置的读取以及更新等操作
2、提供一个 IConfigurationSource 接口实现类,它负责创建 IConfigurationProvider 。
3、创建一个 IConfigurationBuilder 配置建造者对象,然后将 IConfigurationSource 添加进配置构造者中,这里我们一般都采用 IConfigurationBuilder 的拓展方法来实现。
4、使用 IConfigurationBuilder 构造一个 IConfigurationRoot ,然后使用这个 IConfigurationRoot 去操作配置。
这是一般流程,而.net core的配置是一个拓展模块,也就是说我们可以在控制台等其他项目中引用,只需要安装包:Microsoft.Extensions.Configuration
完整介绍:
.net core的配置介绍(一):IConfiguration - 没有星星的夏季 - 博客园 (cnblogs.com)