我们如何在构建后向应用程序设置添加新部分?

问题描述 投票:0回答:1

我正在开发一个 WPF C# 程序,我们希望根据其位置对其进行自定义。我将 DI 与 IOptions 一起使用,并且我已经阅读了数十个用于添加

configBuilder.AddJsonFile($"appsettings.{some_variation}.json")
特定变体的选项。我的特殊情况要求我根据主
appsettings.json
文件中的设置加载特定的 json 文件。直到
configBuilder.build()
之后我才能看到它,可以吗?我可以在
configBuilder.Build()
运行后添加更多部分吗?

    IConfigurationBuilder configBuilder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json");

    if (Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") != null
        && Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT").Length > 0)
        configBuilder.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT")}.json");

到目前为止,一切都很好。但现在我需要特定于使用它的网站的设置。在主要设置中我有这个

"Plant": {
    "Site": "0201",
    "Abbrev": "SAC"
}

我想添加一个新文件

appsettings.plc.SAC.json
。在 configBuilder.Build() 运行之前我无法访问
AppSettings.Plant.Abbrev
,并且完成后我无法使用 AddJsonFile。 在现场,它可以使用
Environment.MachineName.Substring(0,3)
,但这在开发过程中不起作用。也许我应该将站点信息放入启动选项中。我不确定这是否是最好的主意。有人还有其他解决方案吗? 蒂亚,迈克

wpf configuration appsettings
1个回答
0
投票

您可以在实际配置应用程序之前使用另一个构建器来解析该值:

var abbrev = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json")
    .Build().GetSection("Plant")["Abbrev"];

IConfigurationBuilder configBuilder = new ConfigurationBuilder()
...

或者以其他方式自己解析文件。毕竟,它只是一个基于文本的配置文件。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.