NetCore配置框架详解

本文详细讲解了NetCore中的配置框架,涵盖了依赖项安装、根路径输出、多种配置方式(内存、JSON、INI、命令行、环境变量)的读取、实体绑定配置及验证、配置热更新等内容。通过实例展示了如何使用IOptions、IOptionsMonitor等接口进行配置管理,并探讨了配置的实时更新问题。
摘要由CSDN通过智能技术生成

前言

这边文章主要是对netcore中的配置框架做一个实战详解,篇幅较长内容涉及比较多,请耐心阅读并进行尝试,均采用控制台程序进行展示。
环境:
netcore 3.1.4
win10
vs 2019 16.5.5

1、依赖项安装

以下所有依赖项是包含了配置框架中主要用到的依赖项。
主要是以下两个包:

  • Microsoft.Extensions.Configuration.Abstractions 配置框架抽象包
  • Microsoft.Extensions.Configuration 实现包

配置框架中几个重要的对象:

  • IConfigurationBuilder
  • IConfigurationRoot
  • IConfiguration
  • IConfigurationProvider

其他的都主要是配置框架中的扩展项。下面介绍到相关的时候会给出是依赖于那个包,耐心阅读。

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.4" />
    <PackageReference Include="Microsoft.Extensions.Options" Version="3.1.4" />
  </ItemGroup>

2、根路径输出

在使用添加文件的配置时需要设置程序根目录,这里做了一个添加根目录的汇总以及输出展示。
在这里插入图片描述
可以看到AppContext.BaseDirectoryAppDomain.CurrentDomain.BaseDirectory输出了根目录绝对路径(后面多了\),而Environment.CurrentDirectoryDirectory.GetCurrentDirectory()输出后面没有\
\的意义表示bin文件夹里的所有文件和文件夹;反之,bin文件夹里的所有文件和与bin同节的文件

一般都是使用Directory.GetCurrentDirectory()进行设置根目录,这里尝试了添加文件配置的时候四种方式都是可以的。

3、注册各种配置方式

下面代码块展示了添加各种配置的方式。
添加文件的时候有三个参数,第一个参数路径,第二个参数该文件是否可选,第三个参数是否热更新(文件发生变化配置自动更新)

var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
//Microsoft.Extensions.Configuration.Json包
builder.AddJsonFile("appsetting.json", optional: false, reloadOnChange: true);
//Microsoft.Extensions.Configuration.Ini包
builder.AddIniFile("appsetting.ini", optional: false, reloadOnChange: true);
//Microsoft.Extensions.Configuration包
builder.AddInMemoryCollection(new Dictionary<string, string>
{
   
    {
   "Name","Jonny" },
    {
   "Age","25" },
    {
   "Gender","Male" },
    {
   "Address:Address1","重庆奉节" },
    {
   "Address:Address2","重庆渝北" }
});
//Microsoft.Extensions.Configuration.CommandLine包            
builder.AddCommandLine(args);
//Microsoft.Extensions.Configuration.EnvironmentVariables包
builder.AddEnvironmentVariables();
方法 依赖包 说明
AddJsonFile Microsoft.Extensions.Configuration.Json 通过Json文件,aspnet core中最常用的配置方式appsetting.json
AddIniFile Microsoft.Extensions.Configuration.Ini ini文件配置方式
AddInMemoryCollection Microsoft.Extensions.Configuration 内存中配置
AddCommandLine Microsoft.Extensions.Configuration.CommandLine 命令行
AddEnvironmentVariables Microsoft.Extensions.Configuration.EnvironmentVariables 环境变量,环境变量在windows中使用key1:key2:value的方式进行层级之分。而在Linux中:使用双下划线__代替,在编写代码的时候照样使用:取,只是在添加环境变量的时候使用__
3.1 内存配置的读取

上面在内容中添加了配置,这里进行读取。

#region 内存配置的读取
{
   
    Console.WriteLine("=======================内存配置的读取======================");
    var configRoot = builder.Build();
    Console.WriteLine($
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值