【发布时间】:2019-02-09 12:15:17
【问题描述】:
在 ASP.NET Core 2.1 中,我有一个使用 IOptions 接口发送电子邮件的类,如下所示:
public class Email
{
private readonly ManuelaIbiEmail manuelaIbiEmail;
public Email(IOptions<ManuelaIbiEmail> manuelaIbiEmail)
{
this.manuelaIbiEmail.Username = manuelaIbiEmail.Value.Username;
this.manuelaIbiEmail.Password = manuelaIbiEmail.Value.Password;
}
public async Task SendAsync(Contato contato)
{
var smtpClient = new SmtpClient
{
Host = "smtp.sendgrid.net",
Port = 587,
EnableSsl = true,
Credentials = new NetworkCredential(manuelaIbiEmail.Username, manuelaIbiEmail.Password)
};
using (var message = new MailMessage(contato.Email, "manuelaibi66@gmail.com")
{
Subject = "Email de Manuela Ibi Nutrição Integrada",
Body = $"{contato.Comentario}\nTelefone: {contato.Telefone}"
})
{
await smtpClient.SendMailAsync(message);
}
}
}
这个类必须在控制器中用类似“var whatever = new Email(???);”的行来实例化为了可以调用 SendAsync 方法。
但这里的大局是我迷失在这个初始化中。我只是不知道在“Email(something)”中调用什么。
只是,提供更多信息以防万一:
系统应该从 Secrets 中读取用户名、密码,因此我在 Startup.cs 中有以下行:
services.Configure<ManuelaIbiEmail>(Configuration.GetSection("ManuelaIbiEmail"));
ManuelaIbiEmail 是一个非常简单的 POCO 类:
public class ManuelaIbiEmail
{
public string Username { get; set; }
public string Password { get; set; }
}
控制器看起来像:
public class ContactController : Controller
{
private readonly ManuelaIbiEmail manuelaIbiEmail;
public IActionResult Contact()
{
return View(new Contato());
}
[HttpPost]
public async Task<IActionResult> ContactAsync(Contato contato)
{
var email = new Email();
email.SendAsync(contato);
return Ok();
}
}
如果有人能告诉我我缺少什么,我将不胜感激。
提前谢谢你
【问题讨论】:
-
如果你调用
new Email(...)那么你做错了DI,注入那个类以及IOptions -
不要将
IOptions<ManuelaIbiEmail>注入Email。相反,将ManuelaIbiEmail直接注入Email,如here 所述。
标签: c# asp.net-mvc asp.net-core dependency-injection .net-core