using Elsa.ActivityNodeResolvers; using Elsa.Contracts; using Elsa.Expressions; using Elsa.Modules.Activities.Extensions; using Elsa.Options; using Elsa.Persistence.Extensions; using Elsa.Pipelines.ActivityExecution; using Elsa.Pipelines.WorkflowExecution; using Elsa.Runtime.Contracts; using Elsa.Runtime.Extensions; using Elsa.Services; using Microsoft.Extensions.DependencyInjection; namespace Elsa.Extensions; public static class ServiceCollectionExtensions { public static IServiceCollection AddElsa(this IServiceCollection services) => services .AddElsaCore() .AddElsaRuntime() .AddDefaultExpressionHandlers(); public static IServiceCollection AddElsaCore(this IServiceCollection services) { services.AddOptions(); return services // Core. .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton() // Expressions. .AddSingleton() .AddSingleton() // Pipelines. .AddSingleton() .AddSingleton() // Additional activity services. .AddActivityServices() // Persistence services. .AddPersistenceServices() // Logging .AddLogging(); } private static IServiceCollection AddDefaultExpressionHandlers(this IServiceCollection services) => services .AddExpressionHandler() .AddExpressionHandler() .AddExpressionHandler() .AddExpressionHandler() .AddExpressionHandler(); public static IServiceCollection AddWorkflowProvider(this IServiceCollection services) where T : class, IWorkflowProvider => services.AddSingleton(); public static IServiceCollection AddStimulusHandler(this IServiceCollection services) where T : class, IStimulusHandler => services.AddSingleton(); public static IServiceCollection AddInstructionInterpreter(this IServiceCollection services) where T : class, IWorkflowInstructionInterpreter => services.AddSingleton(); }