using CShells.Features; using Elsa.Common.Multitenancy; using Elsa.Common.ShellFeatures; using Elsa.Extensions; using Elsa.Workflows.Options; using Elsa.Scheduling.Bookmarks; using Elsa.Scheduling.Handlers; using Elsa.Scheduling.Services; using Elsa.Scheduling.StartupTasks; using Elsa.Scheduling.TriggerPayloadValidators; using Elsa.Workflows.Management.Extensions; using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; using Elsa.Common.Serialization; 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 = [typeof(SystemClockFeature)])] [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() .AddSingleton() .AddSingleton(CronParser) .AddScoped() .AddScoped() .AddScoped() .AddScoped(WorkflowScheduler) .AddStartupTask() .AddHandlersFrom() .AddTriggerPayloadValidator() .AddActivitiesFrom(); services.Configure(options => { options.AddTypeAlias(); options.AddTypeAlias(); options.AddTypeAlias(); options.AddTypeAlias(); options.AddTypeAlias(); options.AddTypeAlias(); }); } }