4.1 配置
4.1.1 什么是配置
简单来说,配置将系统应用可动态调配的选项放在统一地方管理,通过不同的配置让系统做出动态调整。
在 ASP.NET Core 应用程序启动时默认加载 启动项目 下的 appsettings.json 作为应用配置。同时还支持不同的运行环境加载对应的配置文件,如:
Development:加载appsettings.Development.jsonStaging:加载appsettings.Staging.json{Environment}:appsettings.{Environment}.json
4.1.2 配置的使用
假设我们需要在系统运行时获取系统名称、版本号及版权信息,这些信息可能随时变化而且需要在多个地方使用。这时就需要将这些信息配置起来。具体步骤如下:
4.1.2.1 配置 appsettings.json 信息
特别注意
appsettings.json 复制输出目录为如果较新则复制,生成操作为:内容。
4.1.2.2 读取 appsettings.json 信息
在 Fur 框架中,提供了两种读取方式:
- 依赖注入
IConfiguration对象读取 - 通过
App.Configuration[jsonKey]读取
- App.Configuration[jsonKey]
- 依赖注入方式
依赖注入的方式
通过依赖注入注入实例有几种方式:
- 构造函数注入方式
- 参数注入方式
[FromServices]
- 属性注入方式
想了解更多关于《ASP.NET Core - 依赖注入》 知识
4.1.2.3 如何选择读取方式
- 在可依赖注入类中,依赖注入
IConfiguration读取 - 在静态类/非依赖注入类中,选择
App.Configuration[jsonKey]读取
4.1.3 路径符 查找节点
在 ASP.NET Core 中,配置采用 : 分隔符来读取分层配置数据。如上述例子中的 AppInfo:Name。如有更多层级数据则只需要通过 : 进入下一层节点即可。
假设我们有以下配置信息:
- 读取第二层
- 读取第三层
- 读取第四层
- 读取第N层
4.1.4 自定义配置文件
大多情况下,我们的配置只需要在 appsettings.json 中配置即可,但一些特殊情况下,我们希望某些组件或功能拥有独立的配置,这个时候就需要用到自定义配置,Fur 目前支持 .json 和 .xml 两种方式配置,如:
xml 配置事项
如果采用 xml 配置,那么文件名必须以 .config.xml 结尾(不区分大小写)。
同时 Fur 提供了非常灵活的方式支持自定义配置文件读取,如:
4.1.4.1 读取 emailsetting.json 配置
读取自定义配置文件和读取 appsettings.json 一致,系统会自动从多个配置文件中读取输入,如:
- App.Configuration[jsonKey]
- 依赖注入方式
特别说明
Fur 框架会在启动时自动扫描每一个项目层根目录下的 *.json 和 *.xml 文件加入配置中,所以无需手工配置。新增*.json 和 *.xml 文件的属性复制到输出目录设置为始终复制,否则会扫描不到。
另外在 类库 项目中,不能起名和 启动项目 一样的配置文件名,不然会相互覆盖。
4.1.5 不同环境读取
在实际应用开发中,我们可能会根据不同的环境加载不同的配置文件,如 数据库连接字符串。
这时我们只需要遵循特定命名规范 {name}.{Environment}.json 即可。如:
appsettings.Development.jsonappsettings.Staging.jsonappsettings.Production.jsonemailsetting.Development.jsonemailsetting.Staging.jsonemailsetting.Production.json
这时,ASP.NET Core 会在应用启动时自动加载不同环境的配置文件。
4.1.6 配置更改通知(热更新)
在 .NET Core 应用程序中,配置支持更改通知,也就是热更新操作。一旦监听到 appsetting.json 或自定义配置文件发生变动,就会触发 OnChange 方法。代码如下:
4.1.7 配置的优缺点
优点
- 能够在系统运行时快速读取
- 无需额外配置
缺点
- 存在重复读取
- 通过硬编码字符串读取,容易出错
- 不能设置默认值
- 不能在运行环境中动态配置
- 不能验证配置有效性
- 不支持更改通知
4.1.8 配置使用场景
如果只需要一次性读取配置信息,则使用配置,否则应该使用 《4.2 选项》代替。
4.1.9 反馈与建议
与我们交流
给 Fur 提 Issue。
了解更多
想了解更多 配置 知识可查阅 ASP.NET Core - 配置 章节。