Как добавить 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) {
        //...
    }

    //...
}

Контейнер разрешит и внедрит зависимость в отправителя при ее разрешении.

Другие вопросы по тегам