【问题标题】:How to inject ILogger<T> dependency to a service in ConfigureServices - .net core 2.0如何将 ILogger<T> 依赖项注入到 ConfigureServices 中的服务 - .net core 2.0
【发布时间】:2018-08-08 05:06:10
【问题描述】:

我有以下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;
});

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

【问题讨论】:

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


    【解决方案1】:

    这不行吗?

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

    【讨论】:

      【解决方案2】:

      我想使用实现工厂创建此服务 因为我将从配置和供应中读取 smtp 设置 smtp客户端

      你不应该在实现工厂中添加IMailService,最好在实现工厂中添加SmtpClient

      services.AddTransient<IMailService, MailService>();
      services.AddTransient(_ => new SmtpClient("127.0.0.1", 25));
      

      【讨论】:

      • 好点。但是,我只是在邮件服务的构造函数中添加了一个 from 参数(从配置中读取),除非有办法从 smtp 客户端读取用户名并将其用于 from价值。
      • 好的,我明白你的意思了。我现在将 smtp 客户端单独注册为服务,并在注册时将发件人地址提供给邮件服务。
      猜你喜欢
      • 2018-05-18
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 2018-03-07
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      相关资源
      最近更新 更多