配置
什么是配置
简单来说,配置将系统应用可动态调配的选项放在统一地方管理,通过不同的配置让系统做出动态调整。
在 ASP.NET Core 应用程序启动时默认加载 启动项目 下的 appsettings.json 作为应用配置。同时还支持不同的运行环境加载对应的配置文件,如:
Development:加载appsettings.Development.jsonStaging:加载appsettings.Staging.json{Environment}:appsettings.{Environment}.json
配置的使用
假设我们需要在系统运行时获取系统名称、版本号及版权信息,这些信息可能随时变化而且需要在多个地方使用。这时就需要将这些信息配置起来。具体步骤如下:
配置 appsettings.json 信息
{
"AppInfo": {
"Name": "Furion",
"Version": "1.0.0",
"Company": "Baiqian"
}
}读取 appsettings.json 信息
在 Furion 框架中,提供了两种读取方式:
- 依赖注入
IConfiguration对象读取 - 通过
App.Configuration[jsonKey]读取
- App.Configuration[jsonKey]
- 依赖注入方式
using Microsoft.AspNetCore.Mvc;
namespace Furion.Web.Entry.Controllers
{
[Route("api/[controller]")]
public class DefaultController : ControllerBase
{
[HttpGet]
public string Get()
{
return $@"名称:{App.Configuration["AppInfo:Name"]},
版本:{App.Configuration["AppInfo:Version"]},
公司:{App.Configuration["AppInfo:Company"]}";
}
}
}如何选择读取方式
- 在可依赖注入类中,依赖注入
IConfiguration读取 - 在静态类/非依赖注入类中,选择
App.Configuration[jsonKey]读取
路径符 查找节点
在 ASP.NET Core 中,配置采用 : 分隔符来读取分层配置数据。如上述例子中的 AppInfo:Name。如有更多层级数据则只需要通过 : 进入下一层节点即可。
假设我们有以下配置信息:
{
"AppInfo": {
"Name": "Furion",
"Version": "1.0.0",
"Company": {
"Name": "Baiqian",
"Address": {
"City": "中国",
"Province": "广东省",
"Detail": "中山市东区紫马公园西门"
}
}
}
}自定义配置文件
大多情况下,我们的配置只需要在 appsettings.json 中配置即可,但一些特殊情况下,我们希望某些组件或功能拥有独立的配置,这个时候就需要用到自定义配置,Furion 目前支持 .json 和 .xml 两种方式配置,如:
Furion.Web.Entry/emailsetting.json
{
"outlook": {
"smtp": {
"server": "smtp.office365.com",
"port": "587",
"ssl": "STARTTLS"
},
"pop": {
"server": "outlook.office365.com",
"port": "995",
"ssl": "TLS"
}
}
}<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<MyKey>MyXMLFile Value</MyKey>
<Position>
<Title>Title from MyXMLFile</Title>
<Name>Name from MyXMLFile</Name>
</Position>
<Logging>
<LogLevel>
<Default>Information</Default>
<Microsoft>Warning</Microsoft>
</LogLevel>
</Logging>
</configuration>读取 emailsetting.json 配置
读取自定义配置文件和读取 appsettings.json 一致,系统会自动从多个配置文件中读取输入,如:
var smtpServer = App.Configuration["outlook:smtp:server"]; // => smtp.office365.com
排除特定配置文件
有些时候,我们不需要 .json 或 .xml 自定载入配置中,我们只需要在启动层 appsettings.json 中添加 IgnoreConfigurationFiles 节点即可:
不同环境读取
在实际应用开发中,我们可能会根据不同的环境加载不同的配置文件,如 数据库连接字符串。
这时我们只需要遵循特定命名规范 {name}.{Environment}.json 即可。如:
appsettings.Development.jsonappsettings.Staging.jsonappsettings.Production.jsonemailsetting.Development.jsonemailsetting.Staging.jsonemailsetting.Production.json
这时,ASP.NET Core 会在应用启动时自动加载不同环境的配置文件。
配置更改通知(热更新)
在 .NET Core 应用程序中,配置支持更改通知,也就是热更新操作。一旦监听到 appsetting.json 或自定义配置文件发生变动,就会触发 OnChange 方法。代码如下:
var appInfoConfiguration = App.Configuration["AppInfo"];
ChangeToken.OnChange(() => appInfoConfiguration.GetReloadToken(), () =>
{
var name = appInfoConfiguration["Name"]; // 实时的最新值
var version = appInfoConfiguration["Version"]; // 实时的最新值
});配置的优缺点
优点
- 能够在系统运行时快速读取
- 无需额外配置
缺点
- 存在重复读取
- 通过硬编码字符串读取,容易出错
- 不能设置默认值
- 不能在运行环境中动态配置
- 不能验证配置有效性
- 不支持更改通知
配置使用场景
如果只需要一次性读取配置信息,则使用配置。
