c# - 如何将 ILogger<T> 依赖项注入(inject) ConfigureServices - .net core 2.0 中的服务

标签 c# dependency-injection asp.net-core-2.0 .net-core-logging

我有以下 MailService:

public class MailService : IMailService
{
    private readonly ILogger<MailService> _logger;
    private readonly SmtpClient _client;

    public MailService(ILogger<MailService> logger, SmtpClient client)
    {
        _logger = logger;
        _client = client;
    }

    public async Task Send(string to, string subject, string body)
    {
        var message = new MailMessage
        {
            Subject = subject,
            Body = body,
            IsBodyHtml = true,
            From = new MailAddress("info@domain.com")
        };

        message.To.Add(to);

        using (_client)
        {
            _logger.LogTrace($"Sending email from {message.From.Address} to {to}. Subject: {subject}");
            await _client.SendMailAsync(message);
        }
    }

}

我想使用实现工厂创建此服务,因为我将从配置中读取 smtp 设置并在 Startup.cs 中提供 smtp 客户端,如下所示:

services.AddTransient<IMailService>(provider =>
{
    var mailService = new MailService(***LOGGER INSTANCE HERE***, new SmtpClient("127.0.0.1", 25));
    return mailService;
});

有没有办法获取记录器实例并将其提供给邮件服务?

最佳答案

这行不通吗?

services.AddTransient<IMailService>(provider =>

        {
            return new MailService(provider.GetRequiredService<ILogger<MailService>>(), new SmtpClient());
        });

关于c# - 如何将 ILogger<T> 依赖项注入(inject) ConfigureServices - .net core 2.0 中的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49027522/

相关文章:

asp.net-web-api - 如何将对象参数传递给 web api 中的 get 方法?

c# - C# 中的 SOAP 客户端无法访问 WSDL 文件

c# - VS2012 和 VS2015 浮点/ double 转换的区别

c# - 不重复随机数

c# - 以下场景应遵循的设计模式

.net-core - .NET Core 2.1 使用环境变量在 dotnet core 命令 CLI 中使用 git hash 进行构建

javascript - 警报导致滚动顶部

symfony - 如何覆盖 yaml 中父服务的第一个参数?

testing - 你如何测试 Angular 的依赖注入(inject)?

c# - ASP.Net Core 2.0 Web 应用程序中的本地化