如何覆盖ASP.NET Core配置数组设置并缩短数组长度

3

我有一个ASP.NET Core应用程序,其中包含appsettings.json配置文件。文件中的一个设置由对象数组表示,就像这样:

{
  "Globalization": {
    "Languages": [
      {
        "DisplayName": "Ru",
        "Code": "ru"
      },
      {
        "DisplayName": "En",
        "Code": "en"
      }
    ]
  }
}

在我们的CI系统中,我们使用环境变量来覆盖文件中的配置设置。结果发现我只能通过索引符号(例如"Globalization__Languages__0__DisplayName")覆盖现有项目或添加新项目到数组中,但是我不能减少项数。

而且,在appsettings.{Environment}.json中也是同样的情况,即使我只有一个项目,仍然会显示两个语言选项。

当然我可以让基础配置为空或者发明其他解决办法,但是我是否遗漏了什么?有没有一种简便的方式来覆盖设置并减少项数(最好是使用环境变量)?

1个回答

3

微软社区在我的看法中做出了一个非常糟糕的设计决策,使得数组以这种方式工作。

为了解决这个问题,我们采取了以下方案:

{
  "Globalization": {
    "Languages": "ru|Ru,en|En"
  }
}

然后:

var langs = Configuration.GetSection("Globalization:Languages")
    .Value.Split(',')
    .Select(x => x.Split('|'))
    .Select(x => new { Code = x[0], DisplayName = x[1] })
    .ToArray();

我的建议在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接