Gue*_*lla 2 c# asp.net-core-mvc .net-core asp.net-core asp.net-core-2.0
我的问题是Configure.Services<model>()没有将用户机密绑定到我的班级。服务内部注入的类始终具有null属性。
我的secrets.json看起来像这样:
{
"OtherSection": {
"Another": {
"Prop": "1234"
}
},
"EmailSettings": {
"Mailgun": {
"ApiKey": "omitted",
"BaseUri": "omitted",
"RequestUri": "omitted",
"From": "omitted",
"Smtp": "omitted",
"SmtpUser": "omitted",
"SmtpPass": "omitted",
"SmtpPort": 465
}
}
}
Run Code Online (Sandbox Code Playgroud)
我创建了此用户设置类:
public class MailgunSettings : ISmtpDetails
{
public string ApiKey { get; set; }
public string BaseUri { get; set; }
public string RequestUri { get; set; }
public string From { get; set; }
public string Smtp { get; set; }
public string SmtpUser { get; set; }
public string SmtpPass { get; set; }
public int SmtpPort { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我Startup.cs ConfigureServices()的课堂上,我像这样注册:
services.Configure<MailgunSettings>(options => Configuration.GetSection("EmailSettings:Mailgun").Bind(options));
Run Code Online (Sandbox Code Playgroud)
我将其注入到我的EmailSender服务中,如下所示:
private readonly ISmtpDetails _smtpSettings;
public EmailSender(IOptions<MailgunSettings> smtpSettings)
{
this._smtpSettings = smtpSettings.Value;
}
Run Code Online (Sandbox Code Playgroud)
的每个属性smtpSettings.Value均为null。
我可以使用以下方式访问配置设置Startup.cs:
Configuration["EmailSettings:Mailgun:ApiKey"];
Run Code Online (Sandbox Code Playgroud)
我尝试安装以下nuget软件包:
Run Code Online (Sandbox Code Playgroud)<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.0.0" />
它没有帮助。
我真的不明白为什么它没有绑定并且没有生成任何错误消息。
有人可以帮忙吗?
尝试不使用ISmtpDetails接口:
public class MailgunSettings
{
public string ApiKey { get; set; }
public string BaseUri { get; set; }
public string RequestUri { get; set; }
public string From { get; set; }
public string Smtp { get; set; }
public string SmtpUser { get; set; }
public string SmtpPass { get; set; }
public int SmtpPort { get; set; }
}
private readonly MailgunSettings _smtpSettings;
public EmailSender(IOptions<MailgunSettings> smtpSettings)
{
this._smtpSettings = smtpSettings.Value;
}
Run Code Online (Sandbox Code Playgroud)
如果可行,则需要配置services.Configure<ISmtpDetails>和注入IOptions<ISmtpDetails>
我建议您只使用MailgunSettings并摆脱它Interface ISmtpDetails,因为.NET Core已经为您提供了,所以不需要接口IOptions<T> Interface。
这是一篇理智检查您的IOptions模式的文章:https ://andrewlock.net/how-to-use-the-ioptions-pattern-for-configuration-in-asp-net-core-rc2/
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |