我的问题是Configure.Services<model>()
没有将我的用户 secret 绑定(bind)到我的类(class)。我的服务中注入(inject)的类始终具有 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
}
}
}
我创建了这个用户设置类:
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; }
}
在我的Startup.cs
ConfigureServices()
我正在像这样注册类(class):
services.Configure<MailgunSettings>(options => Configuration.GetSection("EmailSettings:Mailgun").Bind(options));
我将它注入(inject)到我的 EmailSender
中像这样的服务:
private readonly ISmtpDetails _smtpSettings;
public EmailSender(IOptions<MailgunSettings> smtpSettings)
{
this._smtpSettings = smtpSettings.Value;
}
smtpSettings.Value
的每个属性为空。
我能够访问 Startup.cs
内的配置设置与:
Configuration["EmailSettings:Mailgun:ApiKey"];
我尝试安装以下 nuget 包:
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.0.0" />
没有帮助。
我真的不明白为什么它没有绑定(bind)并且没有生成任何错误消息。
有人可以帮忙吗?
最佳答案
尝试不使用 ISmtpDetails 接口(interface):
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;
}
如果它有效,那么您需要配置 services.Configure<ISmtpDetails>
并注入(inject)IOptions<ISmtpDetails>
我建议您只使用MailgunSettings
并摆脱 Interface ISmtpDetails
,不需要接口(interface),因为 .NET Core 已经为您提供了 IOptions<T> Interface
.
这里有一篇文章可以检查您的 IOptions 模式:https://andrewlock.net/how-to-use-the-ioptions-pattern-for-configuration-in-asp-net-core-rc2/
关于c# - Asp.net core 2.0 Configure.Services<model>() 绑定(bind)不适用于用户 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46146446/