Program.cs 2.0 KB

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