11:文件配置提供程序-.NET Core开发实战
.NET Core开发实战前文传送门:
- 第1课:课程介绍
- 第2课:内容综述
- 第3课:.NET Core的现状、未来以及环境搭建
- 第4课:Startup:掌握ASP.NET Core的启动过程
- 第5课:依赖注入:良好架构的起点(上)
- 第5课:依赖注入:良好架构的起点(中)
- 第5课:依赖注入:良好架构的起点(下)
- 第6课:作用域与对象释放行为(上)
- 第6课:作用域与对象释放行为(下)
- 第7课:用Autofac增强容器能力(上)
- 第7课:用Autofac增强容器能力(下)
- 第8课:配置框架:让服务无缝适应各种环境
- 第9课:命令行配置提供程序
- 第10课:环境变量配置提供程序
11 | 文件配置提供程序:自由选择配置的格式
文件配置提供程序
- Microsoft.Extensions.Configuration.Ini
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.Configuration.NewtonsoftJson
- Microsoft.Extensions.Configuration.Xml
- Microsoft.Extensions.Configuration.UserSecrets
这些都是读取不同文件的格式,或者从不同的位置来读取文件
文件提供程序支持
- 文件是否可选
- 监视文件的变更
下面通过代码来了解这些特性
源码链接:
https://github.com/witskeeper/geektime/tree/master/samples/ConfigurationFileDemo
引用以下四个包:
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft.Extensions.Configuration.Ini
- Microsoft.Extensions.Configuration.Json
读取 appsettings.json
{ "Key1": "Value1", "Key2": "Value2" }
主程序
var builder = new ConfigurationBuilder(); builder.AddJsonFile("appsettings.json"); var configurationRoot = builder.Build(); Console.WriteLine($"Key1:{configurationRoot["Key1"]}"); Console.WriteLine($"Key2:{configurationRoot["Key2"]}"); Console.WriteLine($"Key3:{configurationRoot["Key3"]}"); Console.ReadKey();
启动程序,输出如下:
Key1:Value1 Key2:Value2 Key3:
Key3 不存在,所以他的值是空的
文件是否可选是它的第二个参数 optional,默认情况下是 false
builder.AddJsonFile("appsettings.json", optional:false);
这意味当文件不存在的时候它会报错
它的另一个参数是 reloadOnChange, 默认情况下是 true
builder.AddJsonFile("appsettings.json", optional:false, reloadOnChange:true);
这意味着每次文件变更,它会去读取新文件
接下来看一下 appsettings.ini
Key3=Value3 in ini
主程序
var builder = new ConfigurationBuilder(); builder.AddJsonFile("appsettings.json", optional:false, reloadOnChange:true); builder.AddIniFile("appsettings.ini"); var configurationRoot = builder.Build(); Console.WriteLine($"Key1:{configurationRoot["Key1"]}"); Console.WriteLine($"Key2:{configurationRoot["Key2"]}"); Console.WriteLine($"Key3:{configurationRoot["Key3"]}"); Console.ReadKey();
启动程序,输出如下:
Key1:Value1 Key2:Value2 Key3:Value3 in ini
这里可以看到新添加的配置已经生效
builder 中添加配置源是有顺序关系的,后添加的配置会覆盖先添加的配置

原文出处:微信公众号【DotNet NB】,作者【郑子铭】
原文链接:https://mp.weixin.qq.com/s/x3usLX08BYdnDFSHzHo2JQ
本文观点不代表Dotnet9立场,转载请联系原作者。