【发布时间】:2017-10-09 20:14:15
【问题描述】:
我在这里阅读了十几个关于 SO 的问题和至少 4 篇博客文章,但我无法让它在具有多个类库项目的 VS2017 解决方案中工作。但是,我可以让它与一个带有 Web 应用程序和一个类库的解决方案一起工作,尽管它的模式与我在文档和 SO 上找到的模式不同。
我的解决方案包含 5 个项目:WebApplication、Testing、Infrastructure、Services、Domain(后三个是类库)。
在基础设施项目中,我创建了一个名为 EmailConfigurationSettings 的类,并将其注册到 WebApp 的 StartUp 类中。
这个类在类库中:
public class EmailConfigurationSettings
{
public string Provider { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
这是在 WebApp 的 StartUp.cs 中:
services.Configure<EmailConfigurationSettings>(Configuration.GetSection("EmailConfigurationSettings"));
services.AddOptions();
appsettings.json
"EmailConfigurationSettings": {
"Provider": "gmail",
"Username": "user@gmail.com",
"Password": "mypassword"
}
我需要服务项目中的设置。但现在我只是想确保我能真正检索到它们。下面的代码遵循我找到但生成的所有代码示例:
public class LoadEmailSettingsFromAppSettings
{
private readonly IOptions<EmailConfigurationSettings> _emailSettings;
public LoadEmailSettingsFromAppSettings(IOptions<EmailConfigurationSettings> emailSettings)
{
_emailSettings = emailSettings;
Message = "Our provider is " + _emailSettings.Value.Provider;
}
public string Message { get; set; }
}
_emailSettings 始终为空
所以我尝试在 TestProject 中对其进行测试:
IOptions<EmailConfigurationSettings> someOptions = Options.Create<EmailConfigurationSettings>(new EmailConfigurationSettings());
嗯,那也是空的。
在另一种解决方案中,带有 WebApp 和一个类库的解决方案, 使用我在其中一个博客上发现的稍微不同的模式,我实际上可以从 appsettings.json 中检索值:
public class AuthMessageSender : IEmailSender, ISmsSender
{
public AuthMessageSender(IOptions<EmailConfig> emailSettings)
{
_emailSettings = emailSettings.Value;
}
public EmailConfig _emailSettings { get; }
public Task SendEmailAsync(string email, string subject, string message)
{
Execute(email, subject, message).Wait();
return Task.FromResult(0);
}
请注意,IOptions 类与 9 个属性不同,但构造方式与上述模式相同。
但是使用这种模式不在多类库项目中起作用。我如何理解如何让它在多类库场景中工作?
我不知道他们为什么放弃 ConfigurationManager,这要容易得多。
【问题讨论】:
标签: c# json asp.net-core-2.0 appsettings