using CShells.Features; using Elsa.Common.Multitenancy; using Elsa.Common.RecurringTasks; using Elsa.Extensions; using Elsa.Scheduling.Bookmarks; using Elsa.Scheduling.Handlers; using Elsa.Scheduling.HostedServices; using Elsa.Scheduling.Services; using Elsa.Scheduling.TriggerPayloadValidators; using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; namespace Elsa.Scheduling.ShellFeatures; /// /// Provides scheduling features to the system. /// [ShellFeature( DisplayName = "Scheduling", Description = "Provides scheduling capabilities for workflows including cron and delay-based triggers", DependsOn = ["SystemClock"])] [UsedImplicitly] public class SchedulingFeature : IShellFeature { /// /// Gets or sets the trigger scheduler factory. /// public Func WorkflowScheduler { get; set; } = sp => sp.GetRequiredService(); /// /// Gets or sets the CRON parser factory. /// public Func CronParser { get; set; } = sp => sp.GetRequiredService(); public void ConfigureServices(IServiceCollection services) { services .AddSingleton() .AddSingleton(sp => sp.GetRequiredService()) .AddSingleton(sp => sp.GetRequiredService()) .AddSingleton() .AddSingleton() .AddSingleton(CronParser) .AddScoped() .AddScoped() .AddScoped() .AddScoped(WorkflowScheduler) .AddBackgroundTask() .AddHandlersFrom() //Trigger payload validators. .AddTriggerPayloadValidator(); } }