public class EmailService
{
private readonly Dictionary<SluRecipients, IEmailSender?>IEmailSender> _emailSenders;
private readonly DbContextReghoundContext _context;
public EmailService(ReghoundContext context, IServiceProvider serviceProvider)
{
_context = context;
_emailSenders = new Dictionary<SluRecipients, IEmailSender?>IEmailSender>
{
{ SluRecipients.Alert, serviceProvider.GetService<IAlertEmailSender>() ?? throw new InvalidOperationException("Service cannot be registered") },
{ SluRecipients.Company, serviceProvider.GetService<ICompanyEmailSender>() ?? throw new InvalidOperationException("Service cannot be registered") },
{ SluRecipients.Invitation, serviceProvider.GetService<IInvitationEmailSender>() ?? throw new InvalidOperationException("Service cannot be registered") }
};
}
public async Task SendEmailAsync(int emailTemplateId, SendEmailRequest request)
{
var emailTemplate = await _context.TblEmailTemplates.FirstOrDefaultAsync(t => t.EmtpId == emailTemplateId);
if (!_emailSenders.TryGetValue((SluRecipients)emailTemplate.ErecId, out var emailSender) || emailSender == null)
{
throw new InvalidOperationException($"No email sender found for key: {emailTemplate.ErecId}");
}
await emailSender.SendEmailAsync(emailTemplate, request);
}
}
update formatting, Make title describe what code does per site convention - see https://codereview.stackexchange.com/help/how-to-ask
Sᴀᴍ Onᴇᴌᴀ ♦
- 29.6k
- 16
- 46
- 203