A Microsoft.Extensions.Hosting wrapper around the azure/durabletask framework.
See Samples for a quick start example.
- Add nuget package:
dotnet add package Vio.DurableTask.Hosting
- Add to your host builder:
await Host.CreateDefaultBuilder()
.ConfigureServices(services =>
{
// Can configure orchestrations, activities, and middleware in the service
// container with any scope desired.
services.AddSingleton<MySingletonOrchestration>();
services.AddScoped<MyScopedMiddleware>(); // must implement "ITaskMiddleware"
})
.ConfigureTaskHubWorker((context, builder) =>
{
// add orchestration service
builder.WithOrchestrationService(new LocalOrchestrationService());
// add orchestration directly _not_ in service container. Will be treated as transient.
builder.AddOrchestration<MyTransientOrchestration>();
// will be fetched from service provider.
builder.AddOrchestration<MySingletonOrchestration>();
// will be fetched from service provider.
builder.UseOrchestrationMiddleware<MyScopedMiddleware>();
// same as orchestration: can be part of the services or not.
builder.AddActivity<MyTransientActivity>();
})
.RunConsoleAsync(); // starts the worker.
All orchestrations, activities, and middleware will now be constructed via dependency injection.
A new IServiceScope
is created for the duration of every OrchestrationInstance
run. This scope will be used for all actions, middleware, and the orchestration itself and disposed after both the middleware & orchestration pipeline has finished execution. Scopes are not preserved between runs of the same OrchestrationInstance
.