是否可以将强类型数组绑定为 ASP.NET Core 中的配置模型?

get*_*ode 4 c# asp.net asp.net-core

appsettings.json我在我的...中定义了以下内容

{
  "Environments": [
    {
      "Name": "One",
      "CloudServices": [
        "name1",
        "name2"
      ]
    },
    {
      "Name": "Two",
      "CloudServices": [
        "name3",
        "name4"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

...以及以下强类型模型:

public class EnvironmentModel
{
    public string Name { get; set; }
    public string[] CloudServices { get; set; }
}

public class EnvironmentsConfig
{
    public EnvironmentModel[] Environments { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望我可以Startup像这样绑定它:

services.Configure<EnvironmentsConfig>(Configuration.GetSection("Environments"));
Run Code Online (Sandbox Code Playgroud)

但是,当注入我的控制器时,IOptions<EnvironmentsConfig>该值为空。是否可以像这样绑定强类型数组?如果不是,推荐的方法是什么?部署之间的环境数量可能有所不同,因此我需要一个数组。

Dav*_*idG 6

您的配置部分Environments包含一个 数组EnvironmentModel,而不是EnvironmentsConfig. 要修复它,您只需使用配置的根目录而不是部分。例如:

services.Configure<EnvironmentsConfig>(Configuration);
Run Code Online (Sandbox Code Playgroud)