.NET › Generic Host

How does the Generic Host integrate configuration, logging, and dependency injection into a single unified builder?

Intermediate

Answer

HostApplicationBuilder (and its WebApplicationBuilder subclass) exposes .Configuration (an IConfigurationBuilder pre-populated with the standard providers), .Services (an IServiceCollection for DI registration), and .Logging (an ILoggingBuilder for configuring log providers) as properties on the same builder object -- letting you configure all three cross-cutting concerns in one linear, readable sequence before calling .Build() to produce the fully wired IHost, rather than juggling separate configuration objects or nested callback lambdas.
var builder = Host.CreateApplicationBuilder(args);

// All three configured through the same builder instance
builder.Configuration.AddJsonFile("custom-settings.json");
builder.Services.AddHostedService<Worker>();
builder.Logging.AddConsole().SetMinimumLevel(LogLevel.Debug);

var host = builder.Build();
host.Run();
Real-world example A Worker Service's Program.cs reads clearly top-to-bottom -- configuration sources, then service registrations, then logging setup -- all through the same builder variable, making the entire application's cross-cutting setup visible in one place rather than scattered across multiple configuration methods.

Common follow-ups: How does this unified builder pattern compare to the older Startup.cs ConfigureServices/Configure split?;What happens if you try to modify builder.Services after calling Build()?