using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; namespace ScheduledService; public static class ScheduledServiceExtensions { public static IServiceCollection AddCronJob(this IServiceCollection services, Action> options) where T : CronJobService { if (options == null) { throw new ArgumentNullException(nameof(options), "Options cannot be null"); } var config = new ScheduleConfig(); options.Invoke(config); if (string.IsNullOrWhiteSpace(config.CronExpression)) { throw new ArgumentNullException(nameof(ScheduleConfig.CronExpression), "Cron expression cannot be null or empty"); } services.AddSingleton>(config); services.AddHostedService(); return services; } }