3

我有一个 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; //<------------?

我应该通过什么模型?

4

1 回答 1

3

模型通常是被注入的类型,并充当用于识别和分组记录信息的类别。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) {
        //...
    }

    //...
}

容器将在解析时解析并将依赖项注入发送方。

于 2020-01-10T13:08:50.890 回答