WorkflowForge.Extensions.DependencyInjection
2.1.2
See the version list below for details.
dotnet add package WorkflowForge.Extensions.DependencyInjection --version 2.1.2
NuGet\Install-Package WorkflowForge.Extensions.DependencyInjection -Version 2.1.2
<PackageReference Include="WorkflowForge.Extensions.DependencyInjection" Version="2.1.2" />
<PackageVersion Include="WorkflowForge.Extensions.DependencyInjection" Version="2.1.2" />
<PackageReference Include="WorkflowForge.Extensions.DependencyInjection" />
paket add WorkflowForge.Extensions.DependencyInjection --version 2.1.2
#r "nuget: WorkflowForge.Extensions.DependencyInjection, 2.1.2"
#:package WorkflowForge.Extensions.DependencyInjection@2.1.2
#addin nuget:?package=WorkflowForge.Extensions.DependencyInjection&version=2.1.2
#tool nuget:?package=WorkflowForge.Extensions.DependencyInjection&version=2.1.2
WorkflowForge.Extensions.DependencyInjection
Registers WorkflowForge in Microsoft.Extensions.DependencyInjection, binds options from configuration, and fails startup when settings are invalid.
Install
dotnet add package WorkflowForge.Extensions.DependencyInjection
Targets .NET Standard 2.0 or later. WorkflowForge core has no DI dependency; add this package only when you want IOptions<T>, appsettings.json, and hosted app wiring.
Quick Start
ASP.NET Core
// Program.cs or Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Register logger (choose your implementation)
services.AddSingleton<IWorkflowForgeLogger>(sp =>
SerilogLoggerFactory.CreateLogger());
// Register WorkflowForge with configuration binding
services.AddWorkflowForge(Configuration);
// Register WorkflowSmith
services.AddWorkflowSmith();
}
appsettings.json
{
"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
}
}
}
}
Usage in controllers or services
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);
}
}
Key points
AddWorkflowForge(IConfiguration)binds and validates options at startup.AddWorkflowSmith()needsIWorkflowForgeLoggerand a priorAddWorkflowForgecall.- Invalid
appsettings.jsonvalues throw during startup instead of mid-run.
Configuration
Without appsettings.json
services.AddWorkflowForge(
core =>
{
core.MaxConcurrentWorkflows = 2;
core.ContinueOnError = false;
core.EnableOutputChaining = true;
},
timing => timing.Enabled = false,
logging => logging.MinimumLevel = "Warning",
errorHandling => errorHandling.IncludeStackTraces = false
);
Startup validation
Validate() runs on options; IValidateOptions<WorkflowForgeOptions> is registered so bad config fails fast:
// 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
}
}
}
}
Registration API
AddWorkflowForge(IConfiguration)
Binds configuration from appsettings.json and validates.
services.AddWorkflowForge(Configuration);
AddWorkflowForge with delegates
Configure options in code.
services.AddWorkflowForge(
core => { /* ... */ },
timing => { /* ... */ },
logging => { /* ... */ },
errorHandling => { /* ... */ }
);
AddWorkflowSmith()
Registers IWorkflowSmith as a singleton.
Requirements: register IWorkflowForgeLogger, call AddWorkflowForge() first.
services.AddSingleton<IWorkflowForgeLogger>(/* ... */);
services.AddWorkflowForge(Configuration);
services.AddWorkflowSmith(); // ✅ Now WorkflowSmith is available
Configuration sections
| Section | Options class | Validated |
|---|---|---|
WorkflowForge |
WorkflowForgeOptions |
Yes |
WorkflowForge:Middleware:Timing |
TimingMiddlewareOptions |
No |
WorkflowForge:Middleware:Logging |
LoggingMiddlewareOptions |
Yes |
WorkflowForge:Middleware:ErrorHandling |
ErrorHandlingMiddlewareOptions |
No |
Links
- Getting Started
- Extensions Overview
- WorkflowForge: core workflow engine (zero dependencies)
- WorkflowForge.Extensions.Logging.Serilog: Serilog integration
- WorkflowForge.Extensions.Resilience.Polly: Polly resilience patterns
- WorkflowForge.Extensions.Observability.Performance: performance metrics
License
MIT License - Copyright © 2025-2026 AnimatLabs
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Options (>= 10.0.10)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.10)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.10)
- WorkflowForge (>= 2.1.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v2.1.2: Fixed ILRepacked extensions (Polly, OpenTelemetry, Serilog) that were missing transitive dependencies and threw a runtime FileNotFoundException (e.g. Microsoft.Bcl.TimeProvider) — the required BCL/Microsoft.Extensions packages now flow to consumers. Implemented foundry performance monitoring so EnablePerformanceMonitoring()/GetPerformanceStatistics() work end-to-end. Fixed pooled-foundry state leaking across executions and audit entries recording "Unknown" workflow names. Centralized package versioning and shared metadata. Hardened lifecycle-event exception isolation and smith disposal.