using LiteCharms.Features.Extensions; using LiteCharms.Features.Mediator; using LiteCharmsScheduler.Workers; using static LiteCharms.Features.Email.Extensions.Constants; var builder = Host.CreateApplicationBuilder(args); builder.Services.AddMediator(options => options.Assemblies = new List { typeof(Program).Assembly, typeof(LiteCharms.Features.Shop.Notifications.Events.ProcessEmailNotificationsEvent).Assembly }.AsReadOnly()); builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(TelemetryPipelineBehavior<,>)); builder.Services.AddScoped(typeof(IPipelineBehavior<,>), typeof(LoggingPipelineBehavior<,>)); builder.Services.AddEmailServices(builder.Configuration); builder.Services.AddEmailServiceBus(); builder.Services.AddSalesServiceBus(); builder.Services.AddGeneralServiceBus(); builder.Services.AddQuartzScheduler(ShopSchedulerName, builder.Configuration); builder.Services.AddShopServices(); builder.Services.AddShopDatabase(builder.Configuration); builder.Services.AddHostedService(); var host = builder.Build(); var schedulerFactory = host.Services.GetRequiredService(); var scheduler = await schedulerFactory.GetScheduler(ShopSchedulerName); if (!scheduler!.IsStarted) await scheduler.Start(); host.Run();