< 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: 63
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;
 17using Elsa.Platform.PackageManifest.Generator.Hints;
 18
 19namespace Elsa.Resilience.ShellFeatures;
 20
 21[ManifestFeatureCategory("Resilience")]
 22[ShellFeature(
 23    DisplayName = "Resilience",
 24    Description = "Provides workflow resilience strategies and retry attempt tracking")]
 25public class ResilienceFeature : IFastEndpointsShellFeature
 26{
 27    public void ConfigureServices(IServiceCollection services)
 28    {
 029        services.Configure<ExpressionOptions>(options =>
 030        {
 031            options.AddTypeAlias<List<RetryAttemptRecord>>("RetryAttemptRecordList");
 032        });
 33
 034        services.Configure<SerializationTypeOptions>(options =>
 035        {
 036            options.RegisterTypeAlias(typeof(List<RetryAttemptRecord>), "RetryAttemptRecordList");
 037        });
 38
 039        services.AddOptions<ResilienceOptions>();
 040        services.AddOptions<SimulateResponseOptions>();
 041        services.TryAddSingleton(TimeProvider.System);
 42
 043        services
 044            .AddSingleton<ResilienceStrategySerializer>()
 045            .AddSingleton<SimulateResponseSessionStore>()
 046            .AddSingleton<IActivityDescriptorModifier, ResilientActivityDescriptorModifier>()
 047            .AddScoped<IResilienceStrategyCatalog, ResilienceStrategyCatalog>()
 048            .AddScoped<IResilienceStrategyConfigEvaluator, ResilienceStrategyConfigEvaluator>()
 049            .AddScoped<IResilientActivityInvoker, ResilientActivityInvoker>()
 050            .AddScoped<IResilienceStrategySource, ConfigurationResilienceStrategySource>()
 051            .AddSingleton(VoidRetryAttemptRecorder.Instance)
 052            .AddSingleton(VoidRetryAttemptReader.Instance)
 053            .AddScoped<IRetryAttemptRecorder, ActivityExecutionContextRetryAttemptRecorder>()
 054            .AddScoped<IRetryAttemptReader, ActivityExecutionContextRetryAttemptReader>()
 055            .AddScoped<ActivityExecutionContextRetryAttemptReader>()
 056            .AddHandlersFrom<ResilienceFeature>();
 57
 58        // Register transient exception detection infrastructure
 059        services
 060            .AddSingleton<ITransientExceptionStrategy, DefaultTransientExceptionStrategy>()
 061            .AddSingleton<ITransientExceptionDetector, TransientExceptionDetector>();
 062    }
 63}