文章目录
前言
这边文章主要是对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.BaseDirectory
和AppDomain.CurrentDomain.BaseDirectory
输出了根目录绝对路径(后面多了\
),而Environment.CurrentDirectory
和Directory.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($