.Net Core Console&Configuration
前言
有时候想快速验证一些想法,新建一个控制台来弄,可控制台模板是轻量级的应用程序模板,不具备配置、日志、依赖注入等一些功能。
Configuration
在Asp.Net Core应用程序中,可以通过依赖注入使用IConfiguration接口来使用配置。而控制台模板十分简单,没有内置依赖注入,应用程序所依赖的功能(如配置)不容易获得。因此需要一点点在控制台中搭建最为基本的功能,想要使用配置,可通过ConfigurationBuilder类来创建Configuration,还可以使用Json文件、机密文件、环境变量、命令行或自定义的配置提供程序来作为配置源获取配置信息。
安装Configuration包
安装相关NuGet包,每个包的用途看名字就很一目了然。
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Json
Install-Package Microsoft.Extensions.Configuration.CommandLine
Install-Package Microsoft.Extensions.Configuration.UserSecrets
Install-Package Microsoft.Extensions.Configuration.EnvironmentVariables
组装Configuration
如下代码中,添加了一个appsetings.json的配置文件并设置其属性复制到项目输出文件夹,还添加了环境变量、用户机密和命令行作为配置源。最后构建Configuration。
using Microsoft.Extensions.Configuration;
IConfiguration Configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddUserSecrets<Program>()
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();
如上配置源会由后者优先级最高覆盖前者相同配置。
使用Configuration
已经构建了配置提供程序,可以按照下面的方式使用它们
// 获取配置节
var section = Configuration.GetSection("ConnectionStrings");
// 获取值
var value = Configuration.GetValue("ConnectionStrings:Default");
强类型对象
配置节可以映射到强类型对象(选项模式),安装如下Nuget包,可以使用Bind 方法将配置节映射到强类型对象,又或是使用Get方法(推荐)同样的作用。
Install-Package Microsoft.Extensions.Configuration.Binder
例如,有下面的类表示Jwt配置
public class JwtOptions
{
public const string Name = "Jwt";
public string Audience { get; set; }
public string Issuer { get; set; }
public double ExpiresMinutes { get; set; } = 30d;
public string SymmetricSecurityKeyString { get; set; }
}
Json配置文件中加入配置节点
{
"Jwt": {
"Audience": "http://localhost:5105",
"Issuer": "http://localhost:5105",
"ExpiresMinutes": 30,
"SymmetricSecurityKeyString": "Symmetric Security Key"
}
}
如此可以通过Bind或Get方法获取JwtOptions对象。
// Bind方法
var jwtOptions = new JwtOptions();
Configuration.GetSection(JwtOptions.Name).Bind(jwtOptions);
// Get方法
var jwtOptions = Configuration.GetSection(JwtOptions.Name).Get<JwtOptions>();
2023-02-27,望技术有成后能回来看见自己的脚步