Как добавить ILogger для отправки электронной почты?
У меня есть проект Blazor, и я использую MailKit для отправки писем.
Я хочу добавить Logger в почтовый сервис.
То есть Startup.ConfigureServices
//...
services.AddSingleton<IEmailConfiguration>(Configuration.GetSection("EmailConfiguration").Get<EmailConfiguration>());
//...
services.AddTransient<IEmailSender, EmailSender>();
//...
Это EmailSender
оказание услуг:
public class EmailSender : IEmailSender
{
private readonly IEmailConfiguration _emailConfiguration;
//private readonly ILogger<WHATModel> _logger; //<------------?
public EmailSender(IEmailConfiguration emailConfiguration)
{
_emailConfiguration = emailConfiguration;
}
public Task SendEmailAsync(string recipientEmail, string subject, string message)
{
//....
Итак, я могу пройти EmailConfiguration
к сервису, но как я могу передать ILogger
?
Требуется какая-то модель
private readonly ILogger<WHATModel> _logger; //<------------?
Какую модель я должен пройти?
1 ответ
Модель обычно представляет собой вводимый тип и действует как категория для идентификации и группировки регистрируемой информации. ILogger<TCategoryName>
Когда
ILogger
объект создан, для него указана категория. Эта категория включается в каждое сообщение журнала, созданное этим экземпляромILogger
. Категория может быть любой строкой, но по соглашению следует использовать имя класса, например "TodoApi.Controllers.TodoController".
Справочное ведение журнала в.NET Core и ASP.NET Core: категория журнала
Включите его в конструктор как явную зависимость, чтобы его также можно было внедрить
public class EmailSender : IEmailSender {
private readonly IEmailConfiguration emailConfiguration;
private readonly ILogger<EmailSender> logger;
public EmailSender(IEmailConfiguration emailConfiguration, ILogger<EmailSender> logger) {
this.emailConfiguration = emailConfiguration;
this.logger = logger;
}
public Task SendEmailAsync(string recipientEmail, string subject, string message) {
//...
}
//...
}
Контейнер разрешит и внедрит зависимость в отправителя при ее разрешении.