using System.Collections.Concurrent; using Elsa.Features; using Elsa.Features.Services; using Microsoft.Extensions.DependencyInjection; namespace Elsa.Extensions; /// /// Provides extension methods to . /// public static class ModuleExtensions { private static readonly IDictionary Modules = new ConcurrentDictionary(); /// /// Creates a new Elsa module and adds the to it. /// public static IModule AddElsa(this IServiceCollection services, Action? configure = null) { var module = services.GetOrCreateModule(); module.Configure(app => app.Configurator += configure); module.Apply(); return module; } /// /// Configures the Elsa module. /// public static IModule ConfigureElsa(this IServiceCollection services, Action? configure = null) { var module = services.GetOrCreateModule(); if(configure != null) module.Configure(app => app.Configurator += configure); return module; } private static IModule GetOrCreateModule(this IServiceCollection services) { if(Modules.TryGetValue(services, out var module)) return module; module = services.CreateModule(); Modules[services] = module; return module; } }