.net 如何获取当前使用的appsettings.json文件在其他类中的路径

mbzjlibv  于 2023-02-01  发布在  .NET
关注(0)|答案(1)|浏览(189)

我在控制台辅助服务应用程序中有此配置:

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后,似乎没有任何配置文件的信息。

r6vfmomb

r6vfmomb1#

AppSettings不会根据环境选择性地加载,但会发生的情况是,默认文件首先加载,然后任何其他文件将覆盖任何现有的默认设置。
基于您的代码:

  • appsettings.json将作为默认文件添加为非可选文件。这意味着如果该文件不存在,应用程序将失败。
  • 则特定于环境的appsettings.{env}.json将作为可选项加载。如果它不存在,则什么也不发生。如果它存在,则它可能包含的任何设置将覆盖默认设置。

这基本上意味着没有"使用了哪个配置文件",因为如果条件满足,可以加载多个文件。但是要检查应用运行在哪个环境中,您可以使用IHostEnvironment,例如调用IHostEnvironment.EnvironmentName
您可以从文档中了解有关Configuration in .NET的更多信息,文档中还包含有关configuration providersimplementing a custom configuration provider的信息。
您也可以阅读这篇关于.NET Core Dependency Injection with Configuration的文章。

相关问题