Program.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 service
  24. builder.Services.AddHostedService<MessageQueueWorker>();
  25. var host = builder.Build();
  26. // Log startup info
  27. var logger = host.Services.GetRequiredService<ILogger<Program>>();
  28. var jobInterval = builder.Configuration["Job:IntervalSeconds"] ?? "10";
  29. logger.LogInformation("===========================================");
  30. logger.LogInformation("Esim.SendMail Service Starting...");
  31. logger.LogInformation("===========================================");
  32. logger.LogInformation("Job interval: {IntervalSeconds} seconds", jobInterval);
  33. logger.LogInformation("Service started successfully. Press Ctrl+C to stop.");
  34. await host.RunAsync();
  35. }
  36. }