Program.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Database.Database;
  2. using Esim.SendMail.Services;
  3. using Microsoft.EntityFrameworkCore;
  4. using Microsoft.Extensions.Logging;
  5. namespace Esim.SendMail;
  6. public class Program
  7. {
  8. public static async Task Main(string[] args)
  9. {
  10. var builder = Host.CreateApplicationBuilder(args);
  11. // Add configuration
  12. builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
  13. // Configure logging
  14. builder.Logging.ClearProviders();
  15. builder.Logging.AddConsole();
  16. builder.Logging.SetMinimumLevel(LogLevel.Information);
  17. // Add DbContext
  18. var connectionString = builder.Configuration["Connection"];
  19. builder.Services.AddDbContext<ModelContext>(options =>
  20. options.UseOracle(connectionString), ServiceLifetime.Transient);
  21. // Add Email Service as singleton for connection pooling
  22. builder.Services.AddSingleton<IEmailService, HighPerformanceEmailService>();
  23. // Add the background worker services
  24. builder.Services.AddHostedService<MessageQueueWorker>();
  25. builder.Services.AddHostedService<ExpiredMessageCleanupWorker>();
  26. var host = builder.Build();
  27. // Log startup info
  28. var logger = host.Services.GetRequiredService<ILogger<Program>>();
  29. var jobInterval = builder.Configuration["Job:IntervalSeconds"] ?? "10";
  30. logger.LogInformation("===========================================");
  31. logger.LogInformation("Esim.SendMail Service Starting...");
  32. logger.LogInformation("===========================================");
  33. logger.LogInformation("Job interval: {IntervalSeconds} seconds", jobInterval);
  34. logger.LogInformation("Service started successfully. Press Ctrl+C to stop.");
  35. await host.RunAsync();
  36. }
  37. }