簡體   English   中英

如何注射ILogger <T> 依賴於ConfigureServices中的服務 - .net core 2.0

[英]How to inject ILogger<T> dependency to a service in ConfigureServices - .net core 2.0

我有以下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設置並提供smtp客戶端,如Startup.cs的以下內容:

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

有沒有辦法獲取記錄器實例並將其提供給郵件服務?

我想使用實現工廠創建此服務,因為我將從配置中讀取smtp設置並提供smtp客戶端

你不應該用實現工廠添加IMailService ,最好用實現工廠添加SmtpClient

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

這不行嗎?

services.AddTransient<IMailService>(provider =>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM