我在控制台辅助服务应用程序中有此配置:
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath("/home/pi/config/")
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Production"}.json", true, true)
.AddEnvironmentVariables()
.Build();
然后我将其与host一起使用:
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices((cotext, services) =>
{
services.Configure<Settings>(configuration.GetSection(nameof(Settings)));
services.AddSingleton<IMyService, MyService>();
services.AddHostedService<Worker>();
})
.Build();
那么在MyService类示例中,如何获得使用了哪个配置文件及其路径的信息呢?将IConfiguration注入MyService后,似乎没有任何配置文件的信息。
1条答案
按热度按时间r6vfmomb1#
AppSettings
不会根据环境选择性地加载,但会发生的情况是,默认文件首先加载,然后任何其他文件将覆盖任何现有的默认设置。基于您的代码:
appsettings.json
将作为默认文件添加为非可选文件。这意味着如果该文件不存在,应用程序将失败。appsettings.{env}.json
将作为可选项加载。如果它不存在,则什么也不发生。如果它存在,则它可能包含的任何设置将覆盖默认设置。这基本上意味着没有"使用了哪个配置文件",因为如果条件满足,可以加载多个文件。但是要检查应用运行在哪个环境中,您可以使用IHostEnvironment,例如调用IHostEnvironment.EnvironmentName
您可以从文档中了解有关Configuration in .NET的更多信息,文档中还包含有关configuration providers和implementing a custom configuration provider的信息。
您也可以阅读这篇关于.NET Core Dependency Injection with Configuration的文章。