从 Net 6 中的 IHostBuilder 获取配置值

Mig*_*ura 19 c# asp.net-core .net-6.0

我正在使用 Net 6 创建一个 Worker 应用程序,并且在 Program.cs 中有:

IHostBuilder builder = Host.CreateDefaultBuilder(args);

builder.ConfigureHostConfiguration(x => {
  x.AddJsonFile("settings.json", false, true);
  x.AddJsonFile($"settings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", false, true);
  x.AddEnvironmentVariables();
});

builder.UseSerilog(new LoggerBuilder(
  new LoggerOptions {
    ConnectionString = builder.Configuration.Get<Options>().ConnectionString
  }, 
).CreateLogger());
Run Code Online (Sandbox Code Playgroud)

LoggerOptions我需要从中获取OptionsConnectionString得到。

我尝试了以下操作,因为这就是我在使用时所做的WebApplicationBuilder

builder.Configuration.Get<Options>().ConnectionString
Run Code Online (Sandbox Code Playgroud)

但这无法编译,因为它似乎IHostBuilder没有配置属性。

我怎样才能做到这一点?

Zar*_*Zar 22

简单的例子:

var hostBuilder = Host.CreateDefaultBuilder(args);

hostBuilder.UseSerilog((hostContext, services) =>
{
    var connectionString = hostContext.Configuration.GetConnectionString("MyConnectionString");
});

hostBuilder.ConfigureServices((hostContext, services) =>
{
    var connectionString = hostContext.Configuration.GetConnectionString("MyConnectionString");
}
Run Code Online (Sandbox Code Playgroud)


Mat*_* R. 6

您可以使用接受 HostBuilderContext 的配置服务重载来访问它。我通常不使用 LoggerBuilder:

IHost host = Host.CreateDefaultBuilder(args)
    .UseSerilog((context, loggerConfiguration) =>
    {
        loggerConfiguration.ReadFrom.Configuration(context.Configuration);
    })
    .Build();

await host.RunAsync();
Run Code Online (Sandbox Code Playgroud)