在沒有閱讀完整個問題的人投票之前,這已經被問到了,我在這裏讀到了十幾個關於SO的問題,並且至少有4篇博文但是我不能在具有多個類庫項目的VS2017解決方案中工作。不過,我可以通過一個帶有Web應用程序和一個類庫的解決方案來工作,儘管它的格式與我在文檔中找到的格式不同,但在這裏也是如此。從核心2.0中的類庫訪問appsettings.json中的設置
我的解決方案包含5個項目web應用,測試,基礎設施,服務,域名(後三者是類庫)
在我創建了一個類名爲EmailConfigurationSettings和啓動類註冊它的基礎設施項目WebApp。
這個類是類庫
public class EmailConfigurationSettings
{
public string Provider { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
這是StartUp.cs的Web應用程序。
services.Configure<EmailConfigurationSettings>(Configuration.GetSection("EmailConfigurationSettings"));
services.AddOptions();
appsettings.json
"EmailConfigurationSettings": {
"Provider": "gmail",
"Username": "[email protected]",
"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我不知道,這很容易。
運行項目在AddSingleton ca上放置一個斷點ll(在StartUp.cs中)產生一個空的emailConfig。所以這不起作用,與OP方法一樣。 – dinotom
如果這樣會產生空結果,那麼他還沒有正確加載他的應用程序配置。此代碼取自我的個人mvc應用程序,所以我知道它的工作原理。如果你設置一個變量返回getsection我會睡覺它返回null – willthiswork89