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;
}
}