![](/img/trans.png)
[英]How can I inject dependencies into a custom ILogger in asp.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.