C# 无法解析设置类的依赖项注入
好吧,我显然在做一些愚蠢的事情,但我似乎找不到 我正在编写我的第一个Razor Pages应用程序,并创建了一个C# 无法解析设置类的依赖项注入,c#,asp.net-core,dependency-injection,razor-pages,C#,Asp.net Core,Dependency Injection,Razor Pages,好吧,我显然在做一些愚蠢的事情,但我似乎找不到 我正在编写我的第一个Razor Pages应用程序,并创建了一个EmailSender类,该类实现了IEmailSender。此外,EmailSender构造函数接受EmailSettings参数电子邮件设置的实现如下 appsettings.json "EmailSettings": { "Host": "****.*****.com", "Port": "587", "UserName": "****@**********.com"
EmailSender
类,该类实现了IEmailSender
。此外,EmailSender
构造函数接受EmailSettings
参数<代码>电子邮件设置的实现如下
appsettings.json
"EmailSettings": {
"Host": "****.*****.com",
"Port": "587",
"UserName": "****@**********.com",
"Password": "***********",
"FromAddress": "****@**********.com",
"EnableSsl": "true"
},
EmailSettings.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; }
}
public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.AddSingleton<IEmailSender, EmailSender>();
}
Startup.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; }
}
public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
services.AddSingleton<IEmailSender, EmailSender>();
}
public void配置服务(IServiceCollection服务)
{
// ...
services.Configure(Configuration.GetSection(“EmailSettings”);
services.AddSingleton();
}
这遵循了从一个角度采取的基本方法。但当我运行应用程序时,我会立即遇到一个异常:
System.AggregateException:'无法构造某些服务(验证服务描述符“ServiceType:Microsoft.AspNetCore.Identity.UI.Services.IEmailSender生存期:瞬态实现类型:Bamtok.Services.EmailSender”时出错:在尝试激活“Bamtok.Services.EmailSender”时无法解析类型“Bamtok.Services.EmailSettings”的服务。)
不知何故,它无法实例化一个EmailSettings
实例来传递给EmailSender
构造函数
有人能看到我遗漏了什么吗?Configure
寄存器IOptions
并且,正如您所述,您将电子邮件设置
注入到依赖类中
您可以让类保持原样,重构Startup
public void ConfigureServices(IServiceCollection services) {
// ...
EmailSettings settings = Configuration.GetSection("EmailSettings").Get<EmailSettings>();
services.AddSingleton(settings);
services.AddSingleton<IEmailSender, EmailSender>();
}
public void配置服务(IServiceCollection服务){
// ...
EmailSettings=Configuration.GetSection(“EmailSettings”).Get();
services.AddSingleton(设置);
services.AddSingleton();
}
或更新类以期望IOptions
依赖项
public class EmailSender : IEmailSender {
private readonly EmailSettings emailSettings;
public EmailSender(IOptions<EmailSettings> emailSettings) {
this.emailSettings = emailSettings.Value;
}
//...
}
公共类EmailSender:IEmailSender{
私人只读电子邮件设置电子邮件设置;
公共电子邮件发件人(IOptions电子邮件设置){
this.emailSettings=emailSettings.Value;
}
//...
}
前者与后者的区别在于,实现不会与框架问题耦合。Configure添加了
IOptions
,很可能您将EmailSettings
注入了依赖类。链接文章显示了正在注入的IOptions-EmailSettings