我正在开发一个 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)
,但这在开发过程中不起作用。也许我应该将站点信息放入启动选项中。我不确定这是否是最好的主意。有人还有其他解决方案吗?
蒂亚,迈克
您可以在实际配置应用程序之前使用另一个构建器来解析该值:
var abbrev = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build().GetSection("Plant")["Abbrev"];
IConfigurationBuilder configBuilder = new ConfigurationBuilder()
...
或者以其他方式自己解析文件。毕竟,它只是一个基于文本的配置文件。