< Summary

Information
Class: Elsa.UserTasks.Extensions.ServiceCollectionExtensions
Assembly: Elsa.UserTasks
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.UserTasks/Extensions/ServiceCollectionExtensions.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 25
Coverable lines: 25
Total lines: 50
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddUserTasksServices(...)0%620%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.UserTasks/Extensions/ServiceCollectionExtensions.cs

#LineLine coverage
 1using Elsa.UserTasks.Contracts;
 2using Elsa.UserTasks.Options;
 3using Elsa.UserTasks.Repositories;
 4using Elsa.UserTasks.Services;
 5using Elsa.Mediator.Extensions;
 6using Microsoft.Extensions.DependencyInjection;
 7using Microsoft.Extensions.DependencyInjection.Extensions;
 8
 9namespace Elsa.UserTasks.Extensions;
 10
 11public static class ServiceCollectionExtensions
 12{
 13    public static IServiceCollection AddUserTasksServices(this IServiceCollection services, Action<UserTasksOptions>? co
 14    {
 015        if (configure != null)
 016            services.Configure(configure);
 017        services.AddOptions<UserTasksOptions>();
 018        services.TryAddSingleton<IUserTaskIdentityResolver, DefaultClaimsIdentityResolver>();
 019        services.TryAddSingleton<IUserTaskAccessPolicy, DefaultUserTaskAccessPolicy>();
 020        services.TryAddSingleton<IUserTaskParticipantDirectory, EmptyUserTaskParticipantDirectory>();
 21
 22        // The in-memory defaults below hold process state, so they stay singletons. A persistence provider
 23        // replaces them with scoped, store-backed implementations.
 024        services.TryAddSingleton<IUserTaskRepository, InMemoryUserTaskRepository>();
 025        services.TryAddSingleton<IUserTaskGuestSessionIssuer, InMemoryUserTaskGuestSessionIssuer>();
 026        services.TryAddSingleton<IUserTaskInvitationRateLimiter, SlidingWindowUserTaskInvitationRateLimiter>();
 027        services.TryAddSingleton<IUserTaskInvitationOutbox, InMemoryUserTaskInvitationOutbox>();
 028        services.TryAddSingleton<IUserTaskInvitationDispatcher, NullUserTaskInvitationDispatcher>();
 029        services.TryAddSingleton<IUserTaskInvitationVerifier, DefaultUserTaskInvitationVerifier>();
 030        services.TryAddSingleton<IUserTaskNotificationSink, DefaultUserTaskNotificationSink>();
 031        services.TryAddSingleton<IUserTaskWorkflowResumer, DefaultUserTaskWorkflowResumer>();
 32
 33        // Everything that consumes a repository is scoped: a provider-backed repository resolves a DbContext
 34        // from the ambient scope, and a singleton consumer would capture it.
 035        services.TryAddScoped<IUserTaskManager, DefaultUserTaskManager>();
 036        services.TryAddScoped<IUserTaskProjectionService, DefaultUserTaskProjectionService>();
 037        services.TryAddScoped<IUserTaskDueService, DefaultUserTaskDueService>();
 038        services.TryAddScoped<IUserTaskReconciler, DefaultUserTaskReconciler>();
 039        services.TryAddScoped<IUserTaskInvitationService, DefaultUserTaskInvitationService>();
 040        services.TryAddScoped<UserTaskGuestActorResolver>();
 041        services.AddNotificationHandler<Handlers.UserTaskBookmarkPersistedHandler>();
 42
 43        // Hosted workers own the periodic side of the module: due/timeout sweeps, projection reconciliation,
 44        // and draining the encrypted invitation outbox.
 045        services.AddHostedService<HostedServices.UserTaskDueWorker>();
 046        services.AddHostedService<HostedServices.UserTaskReconciliationWorker>();
 047        services.AddHostedService<HostedServices.UserTaskInvitationDeliveryWorker>();
 048        return services;
 49    }
 50}