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