ASP.NET Core 7.0中的配置项Configuration(二)

本文章翻译自微软官方文档:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-7.0

接上篇 ASP.NET Core中的配置项Configuration(一)

appsettings.json文件中的注释

在appsettings.json和appsettings.{Environment}.json文件中的注释支持使用JavaScript或者 C#风格的注释.

使用选项模式绑定分层配置数据

读取关联配置值的首选方式是使用选项模式。比如,读取以下配置值:

"Position": {
    "Title": "Editor",
    "Name": "Joe Smith"
  }

创建以下PositionOptions类:

public class PositionOptions
{
    public const string Position = "Position";

    public string Title { get; set; } = String.Empty;
    public string Name { get; set; } = String.Empty;
}

一个选项类要满足如下要求:

  • 必须是包含无参构造函数的非抽象类
  • 类型的所有公共读写属性都已绑定。
  • 字段不是绑定的。 在上面的代码中,Position 未绑定。 由于使用了 Position 字段,因此在将类绑定到配置提供程序时,不需要在应用中对字符串 "Position" 进行硬编码。

接着看下面的代码:

  • 调用ConfigurationBinder.Bind方法把PositionOptions类绑定到Position配置节点
  • 显示Position节点的配置数据
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}");
    }
}

在上面的代码中,默认情况下,在应用启动后对json配置文件的修改会读取到。

ConfigurationBinder.Get<T>方法可以先绑定指定的类型然后返回相应数据。使用ConfigurationBinder.Get<T>方法可能比使用ConfigurationBinder.Bind方法更方便。以下代码将展示如何将ConfigurationBinder.Get<T>方法和PositionOptions类配合使用:

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}");
    }
}

在上面的代码中,默认情况下,在应用启动后对json配置文件的修改会读取到。

在使用选项模式时的另一种方法是绑定Position 配置节点并加入到依赖注入服务容器中。在以下代码中,PositionOptions类已被使用Configure添加到了服务容器中并且已绑定到了配置:

using ConfigSample.Options;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

builder.Services.Configure<PositionOptions>(
    builder.Configuration.GetSection(PositionOptions.Position));

var app = builder.Build();

通过使用前面的代码,以下代码将读取到position配置节点:

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}");
    }
}

在以上代码中,应用启动后对 JSON配置文件的更改将无法读取到。如果想要读取到应用启动后的更改,请使用IOptionsSnapshot。

使用默认配置情况下,appsettings.json和appsettings.{Environment}.json文件会启用reloadOnChange: true配置。应用启动后对appsettings.json和appsettings.{Environment}.json文件的更改将会被 JSON configuration provider读取。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容