配置
什么是配置
简单来说,配置将系统应用可动态调配的选项放在统一地方管理,通过不同的配置让系统做出动态调整。
在 ASP.NET Core
应用程序启动时默认加载 启动项目
下的 appsettings.json
作为应用配置。同时还支持不同的运行环境加载对应的配置文件,如:
Development
:加载appsettings.Development.json
Staging
:加载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.json
appsettings.Staging.json
appsettings.Production.json
emailsetting.Development.json
emailsetting.Staging.json
emailsetting.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"]; // 实时的最新值 });
配置的优缺点
优点
- 能够在系统运行时快速读取
- 无需额外配置
缺点
- 存在重复读取
- 通过硬编码字符串读取,容易出错
- 不能设置默认值
- 不能在运行环境中动态配置
- 不能验证配置有效性
- 不支持更改通知
配置使用场景
如果只需要一次性读取配置信息,则使用配置。