Skip to content

Enable support for building services with IHostApplicationBuilder #57

@pedropaulovc

Description

@pedropaulovc

.NET 6 brought new builder types inheriting from IHostApplicationBuilder that refactor how to developers may build web / console hosts with fewer callbacks: Comparing WebApplicationBuilder to the Generic Host

WebApplicationBuilder : IHostApplicationBuilder
HostApplicationBuilder : IHostApplicationBuilder

The old IHostBuilder pattern remains supported. A comparision of how both initializations can work is:

IHostBuilder

IHostApplicationBuilder

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Configuration.AddUserSecrets<Program>();

builder.Services.Configure<TaskHubOptions>(opt =>
{
   opt.CreateIfNotExists = true;
});
builder.Services.AddSingleton<IConsole, ConsoleWrapper>();
builder.Services.AddHostedService<TaskEnqueuer>();
builder.Services.AddSingleton(UseLocalEmulator());

builder.ConfigureTaskHubWorker((context, builder) =>
{
   builder.AddClient();
   builder.UseOrchestrationMiddleware<SampleMiddleware>();
   builder.UseActivityMiddleware<SampleMiddleware>();

   builder
       .AddOrchestration<GreetingsOrchestration>()
       .AddOrchestration<GenericOrchestrationRunner>();

   builder.AddActivitiesFromAssembly<Program>();
});

IHost host = builder.Build();

return host.RunAsync();
IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration(builder => builder.AddUserSecrets<Program>())
    .ConfigureServices(services =>
    {
        services.Configure<TaskHubOptions>(opt =>
        {
            opt.CreateIfNotExists = true;
        });
        services.AddSingleton<IConsole, ConsoleWrapper>();
        services.AddHostedService<TaskEnqueuer>();
        services.AddSingleton(UseLocalEmulator());
    })
    .ConfigureTaskHubWorker((context, builder) =>
    {
        builder.AddClient();
        builder.UseOrchestrationMiddleware<SampleMiddleware>();
        builder.UseActivityMiddleware<SampleMiddleware>();

        builder
            .AddOrchestration<GreetingsOrchestration>()
            .AddOrchestration<GenericOrchestrationRunner>();

        builder.AddActivitiesFromAssembly<Program>();
    })
    .UseConsoleLifetime()
    .Build();

return host.RunAsync();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions