Bevor die Leute, die die ganze Frage nicht lesen, diese als bereits gefragt, habe ich ein Dutzend Fragen hier auf SO und mindestens 4 Blog-Posts gelesen aber ich kann das nicht in einer VS2017-Lösung mit mehreren Klassenbibliothek-Projekten arbeiten. Ich kann es jedoch mit einer Lösung mit einer Webanwendung und einer Klassenbibliothek arbeiten lassen, wenn auch mit einem anderen Muster als das, das ich in der Dokumentation und hier auf SO gefunden habe.Zugriff auf Einstellungen von appsettings.json aus der Klassenbibliothek in Core 2.0
Meine Lösung enthält 5 Projekte ein WebApplication, Testing, Infrastruktur, Dienstleistungen, Domain (letztere drei sind Klassenbibliotheken)
Im Infrastrukturprojekt, das ich eine Klasse namens EmailConfigurationSettings erstellt und registriert es in der StartUp-Klasse von die WebApp.
Diese Klasse ist in Klassenbibliothek
public class EmailConfigurationSettings
{
public string Provider { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
Dies ist in StartUp.cs in WebApp.
services.Configure<EmailConfigurationSettings>(Configuration.GetSection("EmailConfigurationSettings"));
services.AddOptions();
appsettings.json
"EmailConfigurationSettings": {
"Provider": "gmail",
"Username": "[email protected]",
"Password": "mypassword"
}
Ich brauche die Einstellungen im Projektdienstleistungen. Aber im Moment versuche ich nur sicherzustellen, dass ich sie tatsächlich abrufen kann. Der folgende Code folgt die alle Code-Beispiele Ich fand aber erzeugt
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 ist immer null
Also versuchte ich es in der Testproject
IOptions<EmailConfigurationSettings> someOptions = Options.Create<EmailConfigurationSettings>(new EmailConfigurationSettings());
Nun, das ist null zu testen. In der anderen Lösung, die mit der WebApp und einer Klassenbibliothek, , benutze ich ein etwas anderes Muster, das ich auf einem der Blogs gefunden habe, kann ich tatsächlich die Werte von appsettings.json abrufen.
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);
}
Bitte beachten Sie die ioptions Klasse mit 9 Eigenschaften anders war, aber die gleiche Art und Weise wie das Muster oben aufgebaut.
Die Verwendung dieses Musters funktioniert jedoch NICHT im Projekt mit mehreren Klassenbibliotheken. Bitte helfen Sie mir zu verstehen, wie Sie dies in einem Szenario mit mehreren Klassenbibliotheken zum Laufen bringen können.
Warum sie den ConfigurationManager aufgegeben haben weiß ich nicht, es war viel einfacher.
Ausführen des Projekts eine klare und hilfreiche Setzen eines Haltepunktes auf AddSingleton ca ll (In StartUp.cs) liefert eine leere emailConfig. also funktioniert das nicht, genauso wie die OP-Methoden. – dinotom
Wenn das Ergebnis null ergibt, hat er seine App-Konfiguration nicht richtig geladen. Dieser Code stammt aus meiner persönlichen mvc-App, also weiß ich, dass es funktioniert. Wenn Sie eine Variable auf die Rückkehr von getsection setzen, werde ich Bett, es gibt null zurück – willthiswork89