Microsoft.Extensions.DependencyInjection integration for WorkflowForge, providing IOptions pattern support, automatic validation, and seamless ASP.NET Core integration.
$ dotnet add package WorkflowForge.Extensions.DependencyInjectionMicrosoft.Extensions.DependencyInjection integration for WorkflowForge
This extension provides seamless integration with Microsoft's dependency injection container, enabling:
dotnet add package WorkflowForge.Extensions.DependencyInjection
Note: This package is optional. WorkflowForge core has zero dependencies and can be used standalone.
// Program.cs or Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Register logger (choose your implementation)
services.AddSingleton<IWorkflowForgeLogger>(sp =>
SerilogExtensions.CreateWorkflowForgeLogger());
// Register WorkflowForge with configuration binding
services.AddWorkflowForge(Configuration);
// Register WorkflowSmith
services.AddWorkflowSmith();
}
{
"WorkflowForge": {
"MaxConcurrentWorkflows": 2,
"ContinueOnError": false,
"FailFastCompensation": false,
"ThrowOnCompensationError": false,
"EnableOutputChaining": true,
"Middleware": {
"Timing": {
"Enabled": true,
"IncludeDetailedTimings": false
},
"Logging": {
"Enabled": true,
"MinimumLevel": "Information",
"LogDataPayloads": false
},
"ErrorHandling": {
"Enabled": true,
"RethrowExceptions": true,
"IncludeStackTraces": true
}
}
}
}
public class WorkflowService
{
private readonly IWorkflowSmith _smith;
private readonly IOptions<TimingMiddlewareOptions> _timingOptions;
public WorkflowService(
IWorkflowSmith smith,
IOptions<TimingMiddlewareOptions> timingOptions)
{
_smith = smith;
_timingOptions = timingOptions;
}
public async Task ExecuteWorkflow()
{
var workflow = new MyWorkflow();
await _smith.ForgeAsync(workflow);
}
}
If you don't use appsettings.json, you can configure options manually:
services.AddWorkflowForge(
core =>
{
core.MaxConcurrentWorkflows = 2;
core.ContinueOnError = false;
core.EnableOutputChaining = true;
},
timing => timing.Enabled = false,
logging => logging.MinimumLevel = "Warning",
errorHandling => errorHandling.IncludeStackTraces = false
);
This extension validates configuration on startup using the Validate() methods from options classes
and registers IValidateOptions<WorkflowForgeOptions> for startup-time checks:
// This will throw on startup if configuration is invalid
services.AddWorkflowForge(configuration);
// Invalid configuration example:
{
"WorkflowForge": {
"MaxConcurrentWorkflows": -5, // ❌ Throws: Must be between 0 and 10000
"Middleware": {
"Logging": {
"MinimumLevel": "Verbose" // ❌ Throws: Must be Trace/Debug/Information/Warning/Error/Critical
}
}
}
}
Validation errors are caught at startup, not at runtime!
Binds configuration from appsettings.json and validates.
services.AddWorkflowForge(Configuration);
Manually configure options.
services.AddWorkflowForge(
core => { /* ... */ },
timing => { /* ... */ },
logging => { /* ... */ },
errorHandling => { /* ... */ }
);
Registers IWorkflowSmith as a singleton.
Requirements:
IWorkflowForgeLogger must be registeredAddWorkflowForge() must be called firstservices.AddSingleton<IWorkflowForgeLogger>(/* ... */);
services.AddWorkflowForge(Configuration);
services.AddWorkflowSmith(); // ✅ Now WorkflowSmith is available
| Section | Options Class | Validated |
|---|---|---|
WorkflowForge | WorkflowForgeOptions | ✅ Yes |
WorkflowForge:Middleware:Timing | TimingMiddlewareOptions | ❌ No |
WorkflowForge:Middleware:Logging | LoggingMiddlewareOptions | ✅ Yes |
WorkflowForge:Middleware:ErrorHandling | ErrorHandlingMiddlewareOptions | ❌ No |
WorkflowForge core has ZERO dependencies to avoid version conflicts when using extensions.
This extension provides optional DI integration for users who want:
If you don't need these features, use WorkflowForge core directly!
MIT License - Copyright © 2025-2026 AnimatLabs