在类中初始化时未从设置中加载集合

Posted

技术标签:

【中文标题】在类中初始化时未从设置中加载集合【英文标题】:Collection not loaded from settings when is initialised in class 【发布时间】:2022-01-23 03:38:52 【问题描述】:

使用 Net 6 我有以下 Program.cs 配置:

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

builder.Configuration
  .SetBasePath(Directory.GetCurrentDirectory())
  .AddJsonFile("settings.json", false, true)
  .AddJsonFile($"settings.Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT").json", false, true)
  .AddEnvironmentVariables();

builder.Services.Configure<Options>(builder.Configuration);

Options 类是:

public partial class Options 
  public IEnumerable<Application> Applications  get; set;  = new List<Application>();

在我拥有的最小 Api 端点上:

builder.MapPost("posts", async ([FromServices] IOptionsMonitor<Options> options, ...) => 
  
  var value = options.CurrentValue;

  var applications = value.Applications;

);

在这种情况下,applications 是一个空集合。

如果我不初始化 Options 类中的 Applications 属性,例如:

public partial class Options 
  public IEnumerable<Application> Applications  get; set;  = new List<Application>();

然后我可以在 Api 端点中获取应用程序。

这种行为是不是很奇怪?我错过了什么吗?

【问题讨论】:

【参考方案1】:

我发现了问题...

属性 Applications 必须是具体类型,例如:

public partial class Options 
  public List<Application> Applications  get; set;  = new List<Application>();

【讨论】:

以上是关于在类中初始化时未从设置中加载集合的主要内容,如果未能解决你的问题,请参考以下文章

图像在 iframe 中加载后未从缓存中加载

在 Vue.js 2 组件中加载时未定义 Webpack 外部 JS 文件

Android WebView 未从缓存中加载第二页

在类中初始化 const

在初始化程序中加载 webview 内容

在 laravel 4 中加载视图时未定义的 $load 属性