Как добавить ILogger для отправки услуги электронной почты? - PullRequest
2 голосов
/ 10 января 2020

У меня есть проект 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 Ответ

3 голосов
/ 10 января 2020

Модель, как правило, вводится в тип и выступает в качестве категории для идентификации и группировки регистрируемой информации. ILogger<TCategoryName>

Когда создается объект ILogger, для него указывается категория. Эта категория включена в каждое сообщение журнала, созданное этим экземпляром ILogger. Категория может быть любой строкой, но соглашение состоит в том, чтобы использовать имя класса, например «TodoApi.Controllers.TodoController».

Ссылка Вход в систему. NET Core и ASP. NET Ядро: категория журнала

Включите его в конструктор в качестве явной зависимости, чтобы его также можно было вставить

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) {
        //...
    }

    //...
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...