具有相同值的多个配置文件

时间:2019-04-15 13:55:01

标签: c# asp.net-core startup

我需要读取多个配置文件(所有JSON)。文件内容在结构上相同。例如

alice.json

{ "Name": "Alice" }

bob.json

{ "Name": "Bob" }

我应该如何将它们全部加载到IConfiguration中而又不能相互覆盖?我可以告诉框架将它们放在与文件名匹配的部分中吗?

2 个答案:

答案 0 :(得分:2)

您想要的东西是不可能的。按照注册配置提供程序的顺序依次加载配置,并且每个后续源均覆盖任何先前的源。实现类似您想要的东西的唯一方法是在JSON中进行实际设置,即:

alice.json

{
  "alice.json": {
    "Name": "Alice"
  }
}

bob.json

{
  "bob.json": {
    "Name": "Bob"
  }
}

答案 1 :(得分:1)

我认为这不是IConfiguration的最佳选择。配置是专门为分层各种配置源而设计的,其中键覆盖了其他键-这是设计使然。

您可能想跳出配置,直接使用JSON序列化程序处理这些问题,并合并结果对象。

public class Person
{
  public string Name { get; set; }
}

public class People
{
  public string[] Names { get; set; }
}

public static People LoadPeople(string[] personJson)
  => new People
  {
    Names = JsonConvert.Deserialize<Person>(personJson).Select(p => p.Name).ToArray()
  };