using CShells.FastEndpoints.Features; using CShells.Features; using Elsa.Expressions.Options; using Elsa.Extensions; using Elsa.Resilience.Endpoints.SimulateResponse; using Elsa.Resilience.Entities; using Elsa.Resilience.Modifiers; using Elsa.Resilience.Options; using Elsa.Resilience.Recorders; using Elsa.Resilience.Serialization; using Elsa.Resilience.StrategySources; using Elsa.Workflows; using Elsa.Workflows.Options; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Elsa.Common.Serialization; namespace Elsa.Resilience.ShellFeatures; [ShellFeature( DisplayName = "Resilience", Description = "Provides workflow resilience strategies and retry attempt tracking")] public class ResilienceFeature : IFastEndpointsShellFeature { public void ConfigureServices(IServiceCollection services) { services.Configure(options => { options.AddTypeAlias>("RetryAttemptRecordList"); }); services.Configure(options => { options.RegisterTypeAlias(typeof(List), "RetryAttemptRecordList"); }); services.AddOptions(); services.AddOptions(); services.TryAddSingleton(TimeProvider.System); services .AddSingleton() .AddSingleton() .AddSingleton() .AddScoped() .AddScoped() .AddScoped() .AddScoped() .AddSingleton(VoidRetryAttemptRecorder.Instance) .AddSingleton(VoidRetryAttemptReader.Instance) .AddScoped() .AddScoped() .AddScoped() .AddHandlersFrom(); // Register transient exception detection infrastructure services .AddSingleton() .AddSingleton(); } }