< Summary

Information
Class: Elsa.Resilience.ShellFeatures.ResilienceFeature
Assembly: Elsa.Resilience
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Resilience/ShellFeatures/ResilienceFeature.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 29
Coverable lines: 29
Total lines: 61
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ConfigureServices(...)100%210%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Resilience/ShellFeatures/ResilienceFeature.cs

#LineLine coverage
 1using CShells.FastEndpoints.Features;
 2using CShells.Features;
 3using Elsa.Expressions.Options;
 4using Elsa.Extensions;
 5using Elsa.Resilience.Endpoints.SimulateResponse;
 6using Elsa.Resilience.Entities;
 7using Elsa.Resilience.Modifiers;
 8using Elsa.Resilience.Options;
 9using Elsa.Resilience.Recorders;
 10using Elsa.Resilience.Serialization;
 11using Elsa.Resilience.StrategySources;
 12using Elsa.Workflows;
 13using Elsa.Workflows.Options;
 14using Microsoft.Extensions.DependencyInjection;
 15using Microsoft.Extensions.DependencyInjection.Extensions;
 16using Elsa.Common.Serialization;
 17
 18namespace Elsa.Resilience.ShellFeatures;
 19
 20[ShellFeature(
 21    DisplayName = "Resilience",
 22    Description = "Provides workflow resilience strategies and retry attempt tracking")]
 23public class ResilienceFeature : IFastEndpointsShellFeature
 24{
 25    public void ConfigureServices(IServiceCollection services)
 26    {
 027        services.Configure<ExpressionOptions>(options =>
 028        {
 029            options.AddTypeAlias<List<RetryAttemptRecord>>("RetryAttemptRecordList");
 030        });
 31
 032        services.Configure<SerializationTypeOptions>(options =>
 033        {
 034            options.RegisterTypeAlias(typeof(List<RetryAttemptRecord>), "RetryAttemptRecordList");
 035        });
 36
 037        services.AddOptions<ResilienceOptions>();
 038        services.AddOptions<SimulateResponseOptions>();
 039        services.TryAddSingleton(TimeProvider.System);
 40
 041        services
 042            .AddSingleton<ResilienceStrategySerializer>()
 043            .AddSingleton<SimulateResponseSessionStore>()
 044            .AddSingleton<IActivityDescriptorModifier, ResilientActivityDescriptorModifier>()
 045            .AddScoped<IResilienceStrategyCatalog, ResilienceStrategyCatalog>()
 046            .AddScoped<IResilienceStrategyConfigEvaluator, ResilienceStrategyConfigEvaluator>()
 047            .AddScoped<IResilientActivityInvoker, ResilientActivityInvoker>()
 048            .AddScoped<IResilienceStrategySource, ConfigurationResilienceStrategySource>()
 049            .AddSingleton(VoidRetryAttemptRecorder.Instance)
 050            .AddSingleton(VoidRetryAttemptReader.Instance)
 051            .AddScoped<IRetryAttemptRecorder, ActivityExecutionContextRetryAttemptRecorder>()
 052            .AddScoped<IRetryAttemptReader, ActivityExecutionContextRetryAttemptReader>()
 053            .AddScoped<ActivityExecutionContextRetryAttemptReader>()
 054            .AddHandlersFrom<ResilienceFeature>();
 55
 56        // Register transient exception detection infrastructure
 057        services
 058            .AddSingleton<ITransientExceptionStrategy, DefaultTransientExceptionStrategy>()
 059            .AddSingleton<ITransientExceptionDetector, TransientExceptionDetector>();
 060    }
 61}