1.配置提供程序
配置提供程序从配置源的键值对读取配置数据。
配置提供程序 | 配置源 |
Azure Key Vault 配置提供程序 | Azure Key Vault |
Azure 应用配置提供程序 | Azure 应用程序配置 |
命令行配置提供程序 | 命令行参数 |
无前缀环境变量配置提供程序 | 无前缀环境变量 |
(带前缀)环境变量配置提供程序 | ASPNETCORE_ 前缀环境变量、DOTNET_ 前缀环境变量 |
文件配置提供程序 | INI 配置提供程序、JSON配置提供程序、XML 配置提供程序 |
INI 配置提供程序 | .ini文件 |
JSON配置提供程序 | 加载顺序:appsettings.json文件、appsettings.{Environment}.json文件(appsettings.Production.json、appsettings.Development.json)。 |
XML 配置提供程序 | .xml文件 |
Key-per-file 配置提供程序 | 目录文件 |
内存配置提供程序 | 内存中的 .NET 集合对象 |
用户机密配置提供程序 | 用户配置文件目录中的文件 |
自定义配置提供程序 | 自定义源 |
2.选项模式
读取相关配置值的首选方法是使用选项模式。
//JSON文件
"Position": {
"Title": "Editor",
"Name": "Joe Smith"
}
选项模式的原理是创建一个无构造函数的非抽象类,然后类中的字段和属性 与 JSON文件一一对应。所有公共读写属性都已绑定,但字段需后期调用 ConfigurationBinder.Bind 或 ConfigurationBinder.Get<T>或 依赖注入绑定。
GetSection()
会根据PositionOptions.Position
返回的字符串值确定需要绑定的Section。
public class PositionOptions
{
//对应JSON文件的Position Section
public const string Position = "Position";
//对应JSON文件的Title键
public string Title { get; set; } = String.Empty;
//对应JSON文件的Name键
public string Name { get; set; } = String.Empty;
}
2.1Bind绑定法
ConfigurationBinder.Bind
会根据对象类型来确定需要绑定的类。
public class Test22Model : PageModel
{
private readonly IConfiguration Configuration;
public Test22Model(IConfiguration configuration)
{
Configuration = configuration;
}
public ContentResult OnGet()
{
var positionOptions = new PositionOptions();
Configuration.GetSection(PositionOptions.Position).Bind(positionOptions);
return Content($"Title: {positionOptions.Title} \n" +
$"Name: {positionOptions.Name}");
}
}
2.2Get<T>绑定法
ConfigurationBinder.Get<T>
绑定并返回指定的类型。 使用 ConfigurationBinder.Get<T>
可能比使用 ConfigurationBinder.Bind()
更方便。
public class Test21Model : PageModel
{
private readonly IConfiguration Configuration;
public PositionOptions? positionOptions { get; private set; }
public Test21Model(IConfiguration configuration)
{
Configuration = configuration;
}
public ContentResult OnGet()
{
positionOptions = Configuration.GetSection(PositionOptions.Position)
.Get<PositionOptions>();
return Content($"Title: {positionOptions.Title} \n" +
$"Name: {positionOptions.Name}");
}
}
2.3依赖注入绑定法
using ConfigSample.Options;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<PositionOptions>(
builder.Configuration.GetSection(PositionOptions.Position));
var app = builder.Build();
public class Test2Model : PageModel
{
private readonly PositionOptions _options;
public Test2Model(IOptions<PositionOptions> options)
{
_options = options.Value;
}
public ContentResult OnGet()
{
return Content($"Title: {_options.Title} \n" +
$"Name: {_options.Name}");
}
}
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/aspnetcoremvc/15746.html