'Get Configuration value from IHostBuilder in Net 6

I am creating a Worker application using Net 6 and I have in 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());

In LoggerOptions I need to get Options and the ConnectionString from it.

I tried the following because that is what I do when using WebApplicationBuilder:

builder.Configuration.Get<Options>().ConnectionString

But this does not compile as it seems IHostBuilder does not have a Configuration property.

How can I do this?



Solution 1:[1]

You can access it by using the configure services overload that accepts the HostBuilderContext. I don't typically use the LoggerBuilder:

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

await host.RunAsync();

Solution 2:[2]

Simple example:

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");
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Matt R.
Solution 2 Zar