What is the best way to access configuration data in a .NET Core worker service/console app?

53 Views Asked by At

I have a series of .NET Core worker services (targeting .NET 6). I am accessing configuration data from appsettings.json through hostcontext and that works fine:

public static async Task Main(string[] args)
{
    // Start the application
    await CreateHostBuilder(args).Build().RunAsync();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .UseWindowsService()
        .ConfigureServices((hostContext, services) =>
        {
            // I can access config data like this:
            var connectionString = hostcontext.Configuration["ConnectionStrings:MyConnectionString"];
        });

However, I now need to get configuration data from within Main() before CreateHostBuilder() is called.

I can do something like this, but is there a better way? It feels wrong to build a ConfigurationBuilder just to grab this one value, is there a more efficient way to do this?

public static async Task Main(string[] args)
{
    // Get the configuration
    var environmentName = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") ?? "Production";

    var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .AddJsonFile($"appsettings.{environmentName}.json", true, true);

    var configuration = builder.Build();

    // Start the application
    await CreateHostBuilder(args).Build().RunAsync();
}
0

There are 0 best solutions below