c# - 无法解决设置类的依赖注入
问题描述
好的,我显然在这里做一些愚蠢的事情,但我似乎找不到它。
我正在编写我的第一个 Razor Pages 应用程序并创建了一个EmailSender
类,它实现了IEmailSender
. 此外,EmailSender
构造函数接受一个EmailSettings
参数。EmailSettings
实现如下。
应用设置.json
"EmailSettings": {
"Host": "****.*****.com",
"Port": "587",
"UserName": "****@**********.com",
"Password": "***********",
"FromAddress": "****@**********.com",
"EnableSsl": "true"
},
电子邮件设置.cs
public class EmailSettings
{
public string Host { get; set; }
public int Port { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FromAddress { get; set; }
public bool EnableSsl { get; set; }
}
启动.cs
public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.AddSingleton<IEmailSender, EmailSender>();
}
这遵循从我阅读的一篇文章中获取的基本方法。但是当我运行该应用程序时,我立即得到一个异常:
System.AggregateException:'某些服务无法构造(验证服务描述符时出错'ServiceType:Microsoft.AspNetCore.Identity.UI.Services.IEmailSender Lifetime:Transient ImplementationType:Bamtok.Services.EmailSender':无法解析服务尝试激活“Bamtok.Services.EmailSender”时输入“Bamtok.Services.EmailSettings”。)
不知何故,它无法实例化EmailSettings
实例以传递给EmailSender
构造函数。
谁能看到我错过了什么?
解决方案
Configure<T>
注册IOptions<EmailSettings>
,并且正如您所说,您注入EmailSettings
了依赖类。
您可以按原样保留课程并重构Startup
public void ConfigureServices(IServiceCollection services) {
// ...
EmailSettings settings = Configuration.GetSection("EmailSettings").Get<EmailSettings>();
services.AddSingleton(settings);
services.AddSingleton<IEmailSender, EmailSender>();
}
或者更新类以期望IOptions<T>
依赖
public class EmailSender : IEmailSender {
private readonly EmailSettings emailSettings;
public EmailSender(IOptions<EmailSettings> emailSettings) {
this.emailSettings = emailSettings.Value;
}
//...
}
前者与后者建议的区别在于,实现不会与框架问题耦合。
推荐阅读
- python - 如何获得一个数字的中间5位数字
- mysql - 错误代码:1109。字段列表中的未知表“evrz.account”
- python - 我无法在 pyCharm 上安装任何软件包并出现错误:“连接被 'SSLError(SSLError(1,'[SSL: TLSV1_ALERT_ACCESS_DENIED]
- r - 用特定列的前一个字符替换 NA 在 R 中添加一些字母
- elasticsearch - 如何获取 ES 索引的每个术语的出现次数和 doc_count?
- latex - 如何在普通乳胶文档中添加 IEEE 样式部分?
- reactjs - 如何在反应中处理自定义挂钩的依赖项数组
- jspdf-autotable - jsPDF AutoTable第一行中的Colspan
- php - PHP 通过单击查看按钮从单个记录中查看数据
- angular - IdentityServer 4 用户注册 - 放在哪里?