< Summary

Information
Class: Elsa.Workflows.Management.Extensions.ManagementServiceCollectionExtensions
Assembly: Elsa.Workflows.Management
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Extensions/ManagementServiceCollectionExtensions.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 21
Coverable lines: 21
Total lines: 105
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddActivities(...)0%620%
AddActivity(...)100%210%
AddActivitiesFrom(...)0%7280%
AddActivitiesFrom(...)100%210%
AddVariableDescriptors(...)0%620%
AddVariableDescriptor(...)100%210%
AddVariableDescriptor(...)100%210%
AddVariableTypeAndAlias(...)100%210%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/Extensions/ManagementServiceCollectionExtensions.cs

#LineLine coverage
 1using System.Reflection;
 2using Elsa.Expressions.Extensions;
 3using Elsa.Workflows.Management.Models;
 4using Elsa.Workflows.Management.Options;
 5using Microsoft.Extensions.DependencyInjection;
 6
 7// ReSharper disable once CheckNamespace
 8namespace Elsa.Workflows.Management.Extensions;
 9
 10/// <summary>
 11/// <see cref="IServiceCollection"/> extension methods for registering Elsa activity types
 12/// and variable descriptors via <see cref="ManagementOptions"/>.
 13/// </summary>
 14/// <remarks>
 15/// These extensions are the shell-feature-compatible replacement for calling
 16/// <c>WorkflowManagementFeature.AddActivitiesFrom&lt;T&gt;()</c> in the old-style feature system.
 17/// Because <c>services.Configure&lt;ManagementOptions&gt;</c> is additive, multiple features
 18/// can independently register activities without any coupling to each other.
 19/// </remarks>
 20public static class ManagementServiceCollectionExtensions
 21{
 22    // -------------------------------------------------------------------------
 23    // Activities
 24    // -------------------------------------------------------------------------
 25
 26    /// <summary>
 27    /// Registers the supplied activity <paramref name="types"/> with <see cref="ManagementOptions"/>.
 28    /// </summary>
 29    public static IServiceCollection AddActivities(this IServiceCollection services, IEnumerable<Type> types) =>
 030        services.Configure<ManagementOptions>(options =>
 031        {
 032            foreach (var type in types)
 033                options.ActivityTypes.Add(type);
 034        });
 35
 36    /// <summary>
 37    /// Registers a single activity type <typeparamref name="TActivity"/> with <see cref="ManagementOptions"/>.
 38    /// </summary>
 39    public static IServiceCollection AddActivity<TActivity>(this IServiceCollection services)
 40        where TActivity : IActivity =>
 041        services.AddActivities([typeof(TActivity)]);
 42
 43    /// <summary>
 44    /// Scans <paramref name="assembly"/> and registers every concrete, non-generic
 45    /// <see cref="IActivity"/> implementation found.
 46    /// </summary>
 47    public static IServiceCollection AddActivitiesFrom(this IServiceCollection services, Assembly assembly)
 48    {
 049        var types = assembly.GetExportedTypes()
 050            .Where(t => typeof(IActivity).IsAssignableFrom(t)
 051                        && t is { IsAbstract: false, IsInterface: false, IsGenericTypeDefinition: false });
 052        return services.AddActivities(types);
 53    }
 54
 55    /// <summary>
 56    /// Scans the assembly that contains <typeparamref name="TMarker"/> and registers every
 57    /// concrete, non-generic <see cref="IActivity"/> implementation found.
 58    /// </summary>
 59    public static IServiceCollection AddActivitiesFrom<TMarker>(this IServiceCollection services) =>
 060        services.AddActivitiesFrom(typeof(TMarker).Assembly);
 61
 62    // -------------------------------------------------------------------------
 63    // Variable descriptors
 64    // -------------------------------------------------------------------------
 65
 66    /// <summary>
 67    /// Registers the supplied <paramref name="descriptors"/> with <see cref="ManagementOptions"/>.
 68    /// </summary>
 69    public static IServiceCollection AddVariableDescriptors(
 70        this IServiceCollection services,
 71        IEnumerable<VariableDescriptor> descriptors) =>
 072        services.Configure<ManagementOptions>(options =>
 073        {
 074            foreach (var descriptor in descriptors)
 075                options.VariableDescriptors.Add(descriptor);
 076        });
 77
 78    /// <summary>
 79    /// Registers a single variable descriptor.
 80    /// </summary>
 81    public static IServiceCollection AddVariableDescriptor(
 82        this IServiceCollection services,
 83        VariableDescriptor descriptor) =>
 084        services.AddVariableDescriptors([descriptor]);
 85
 86    /// <summary>
 87    /// Registers a variable descriptor for <typeparamref name="T"/> with the given
 88    /// <paramref name="category"/> and optional <paramref name="description"/>.
 89    /// </summary>
 90    public static IServiceCollection AddVariableDescriptor<T>(
 91        this IServiceCollection services,
 92        string category,
 93        string? description = null) =>
 094        services.AddVariableDescriptor(new(typeof(T), category, description));
 95
 96    /// <summary>
 97    /// Adds a variable type and its alias to the specified service collection.
 98    /// </summary>
 99    public static IServiceCollection AddVariableTypeAndAlias<T>(this IServiceCollection services, string alias, string c
 100    {
 0101        return services
 0102            .AddVariableDescriptor<T>(category)
 0103            .AddTypeAlias<T>(alias);
 104    }
 105}