< Summary

Information
Class: Elsa.Workflows.Management.ShellFeatures.WorkflowManagementFeature
Assembly: Elsa.Workflows.Management
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/ShellFeatures/WorkflowManagementFeature.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 69
Coverable lines: 69
Total lines: 139
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
get_VariableDescriptors()100%210%
.ctor()100%210%
ConfigureServices(...)100%210%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Workflows.Management/ShellFeatures/WorkflowManagementFeature.cs

#LineLine coverage
 1using System.Dynamic;
 2using System.Text.Json;
 3using System.Text.Json.Nodes;
 4using CShells.Features;
 5using Elsa.Caching.Features;
 6using Elsa.Common.Features;
 7using Elsa.Expressions.Contracts;
 8using Elsa.Extensions;
 9using Elsa.Features.Attributes;
 10using Elsa.Workflows.Options;
 11using Elsa.Workflows.Features;
 12using Elsa.Workflows.Management.Activities.WorkflowDefinitionActivity;
 13using Elsa.Workflows.Management.Contracts;
 14using Elsa.Workflows.Management.Entities;
 15using Elsa.Workflows.Management.Extensions;
 16using Elsa.Workflows.Management.Features;
 17using Elsa.Workflows.Management.Handlers.Notifications;
 18using Elsa.Workflows.Management.Mappers;
 19using Elsa.Workflows.Management.Materializers;
 20using Elsa.Workflows.Management.Models;
 21using Elsa.Workflows.Management.Options;
 22using Elsa.Workflows.Management.Providers;
 23using Elsa.Workflows.Management.Services;
 24using Elsa.Workflows.Management.Stores;
 25using Elsa.Workflows.Serialization.Serializers;
 26using JetBrains.Annotations;
 27using Microsoft.Extensions.DependencyInjection;
 28using Elsa.Common.Serialization;
 29
 30namespace Elsa.Workflows.Management.ShellFeatures;
 31
 32/// <summary>
 33/// Installs and configures the workflow management feature.
 34/// </summary>
 35[ShellFeature(
 36    DisplayName = "Workflow Management",
 37    Description = "Provides comprehensive workflow definition and instance management capabilities",
 38    DependsOn =
 39    [
 40        "StringCompression",
 41        "Mediator",
 42        "MemoryCache",
 43        "SystemClock",
 44        "Workflows",
 45        "WorkflowDefinitions",
 46        "WorkflowInstances"
 47    ])]
 48[UsedImplicitly]
 49public class WorkflowManagementFeature : IShellFeature
 50{
 51    private const string PrimitivesCategory = "Primitives";
 52    private const string LookupsCategory = "Lookups";
 53    private const string DynamicCategory = "Dynamic";
 54    private const string DataCategory = "Data";
 55    private const string SystemCategory = "System";
 56
 57    /// <summary>
 58    /// A set of variable types to make available to the system.
 59    /// </summary>
 060    public HashSet<VariableDescriptor> VariableDescriptors { get; } =
 061    [
 062        new(typeof(object), PrimitivesCategory, "The root class for all objects in the CLR System."),
 063        new(typeof(string), PrimitivesCategory, "Represents a static string of characters."),
 064        new(typeof(bool), PrimitivesCategory, "Represents a true or false value."),
 065        new(typeof(int), PrimitivesCategory, "A 32 bit integer."),
 066        new(typeof(long), PrimitivesCategory, "A 64 bit integer."),
 067        new(typeof(float), PrimitivesCategory, "A 32 bit floating point number."),
 068        new(typeof(double), PrimitivesCategory, "A 64 bit floating point number."),
 069        new(typeof(decimal), PrimitivesCategory, "A decimal number."),
 070        new(typeof(Guid), PrimitivesCategory, "Represents a Globally Unique Identifier."),
 071        new(typeof(DateTime), PrimitivesCategory, "A value type that represents a date and time."),
 072        new(typeof(DateTimeOffset), PrimitivesCategory, "A value type that consists of a DateTime and a time zone offset
 073        new(typeof(TimeSpan), PrimitivesCategory, "Represents a duration of time."),
 074        new(typeof(IDictionary<string, string>), LookupsCategory, "A dictionary with string key and values."),
 075        new(typeof(IDictionary<string, object>), LookupsCategory, "A dictionary with string key and object values."),
 076        new(typeof(ExpandoObject), DynamicCategory, "A dictionary that can be typed as dynamic to access members using d
 077        new(typeof(JsonElement), DynamicCategory, "A JSON element for reading a JSON structure."),
 078        new(typeof(JsonNode), DynamicCategory, "A JSON node for reading and writing a JSON structure."),
 079        new(typeof(JsonObject), DynamicCategory, "A JSON object for reading and writing a JSON structure."),
 080        new(typeof(byte[]), DataCategory, "A byte array."),
 081        new(typeof(Stream), DataCategory, "A stream.")
 082    ];
 83
 84
 85    public void ConfigureServices(IServiceCollection services)
 86    {
 087        services
 088            .AddMemoryStore<WorkflowDefinition, MemoryWorkflowDefinitionStore>()
 089            .AddMemoryStore<WorkflowInstance, MemoryWorkflowInstanceStore>()
 090            .AddActivityProvider<TypedActivityProvider>()
 091            .AddActivityProvider<WorkflowDefinitionActivityProvider>()
 092            .AddScoped<WorkflowDefinitionActivityDescriptorFactory>()
 093            .AddScoped<WorkflowDefinitionActivityProvider>()
 094            .AddScoped<IWorkflowDefinitionActivityRegistryUpdater, WorkflowDefinitionActivityRegistryUpdater>()
 095            .AddScoped<IMaterializerRegistry, MaterializerRegistry>()
 096            .AddScoped<IWorkflowDefinitionService, WorkflowDefinitionService>()
 097            .AddScoped<IWorkflowSerializer, WorkflowSerializer>()
 098            .AddScoped<IWorkflowValidator, WorkflowValidator>()
 099            .AddScoped<IWorkflowReferenceQuery, DefaultWorkflowReferenceQuery>()
 0100            .AddScoped<IWorkflowReferenceGraphBuilder, WorkflowReferenceGraphBuilder>()
 0101            .AddScoped<IWorkflowDefinitionPublisher, WorkflowDefinitionPublisher>()
 0102            .AddScoped<IWorkflowDefinitionImporter, WorkflowDefinitionImporter>()
 0103            .AddScoped<IWorkflowDefinitionExporter, WorkflowDefinitionExporter>()
 0104            .AddSingleton<IFileNameSanitizer, DefaultFileNameSanitizer>()
 0105            .AddScoped<IWorkflowDefinitionManager, WorkflowDefinitionManager>()
 0106            .AddScoped<IWorkflowInstanceManager, WorkflowInstanceManager>()
 0107            .AddScoped<IWorkflowReferenceUpdater, WorkflowReferenceUpdater>()
 0108            .AddScoped<IActivityRegistryPopulator, ActivityRegistryPopulator>()
 0109            .AddSingleton<IExpressionDescriptorRegistry, ExpressionDescriptorRegistry>()
 0110            .AddSingleton<IExpressionDescriptorProvider, DefaultExpressionDescriptorProvider>()
 0111            .AddSerializationOptionsConfigurator<SerializationOptionsConfigurator>()
 0112            .AddScoped<IWorkflowMaterializer, TypedWorkflowMaterializer>()
 0113            .AddScoped<IWorkflowMaterializer, ClrWorkflowMaterializer>()
 0114            .AddScoped<IWorkflowMaterializer, JsonWorkflowMaterializer>()
 0115            .AddScoped<IActivityResolver, WorkflowDefinitionActivityResolver>()
 0116            .AddScoped<IWorkflowInstanceVariableManager, WorkflowInstanceVariableManager>()
 0117            .AddScoped<WorkflowDefinitionMapper>()
 0118            .AddSingleton<VariableDefinitionMapper>()
 0119            .AddSingleton<WorkflowStateMapper>()
 0120            .AddScoped<IWorkflowInstanceStore, MemoryWorkflowInstanceStore>()
 0121            .AddScoped<IWorkflowDefinitionStore, MemoryWorkflowDefinitionStore>();
 122
 0123        services
 0124            .AddNotificationHandler<DeleteWorkflowInstances>()
 0125            .AddNotificationHandler<RefreshActivityRegistry>()
 0126            .AddNotificationHandler<UpdateConsumingWorkflows>()
 0127            .AddNotificationHandler<ValidateWorkflow>();
 128
 129        // Register built-in activities from the Workflows and WorkflowManagement assemblies.
 0130        services
 0131            .AddActivitiesFrom<WorkflowsFeature>()
 0132            .AddActivitiesFrom<WorkflowManagementFeature>();
 133
 134        // Register the default variable descriptors declared on this feature.
 0135        services.AddVariableDescriptors(VariableDescriptors);
 136
 0137        services.Configure<SerializationTypeOptions>(options => options.RegisterTypeAlias(typeof(ClrWorkflowMaterializer
 0138    }
 139}