Avant que les personnes qui ne lisent pas la question en entier votent comme étant déjà demandé, j'ai lu une douzaine de questions ici sur SO et au moins 4 messages de blog mais je ne peux pas obtenir cela pour travailler dans une solution VS2017 avec plusieurs projets de bibliothèque de classes. Cependant, je peux le faire fonctionner avec une solution avec une application web et une bibliothèque de classes, bien qu'avec un modèle différent de celui que j'ai trouvé dans la documentation et ici sur SO.Accéder aux paramètres de appsettings.json de la bibliothèque de classes dans Core 2.0
Ma solution contient 5 projets un WebApplication, d'essais, de l'infrastructure, des services, domaine (les trois derniers sont des bibliothèques de classes)
Dans le projet d'infrastructure, j'ai créé une classe appelée EmailConfigurationSettings et enregistrée dans la classe StartUp de l'application Web.
Cette classe est dans la bibliothèque de classe
public class EmailConfigurationSettings
{
public string Provider { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
Ceci est en StartUp.cs WebApp.
services.Configure<EmailConfigurationSettings>(Configuration.GetSection("EmailConfigurationSettings"));
services.AddOptions();
appsettings.json
"EmailConfigurationSettings": {
"Provider": "gmail",
"Username": "[email protected]",
"Password": "mypassword"
}
J'ai besoin les paramètres du projet Services. Mais pour l'instant, j'essaie juste de m'assurer que je peux vraiment les récupérer. Le code ci-dessous suit tous les exemples de code, mais je trouve génère
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 est toujours nul
J'ai donc essayé de le tester dans le TestProject
IOptions<EmailConfigurationSettings> someOptions = Options.Create<EmailConfigurationSettings>(new EmailConfigurationSettings());
thats bien null aussi.
Dans l'autre solution, celle avec la WebApp et une bibliothèque de classes, en utilisant un modèle légèrement différent que j'ai trouvé sur l'un des blogs, je peux réellement récupérer les valeurs de 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);
}
S'il vous plaît noter la classe ioptions était différent avec 9 propriétés, mais construit de la même manière que le schéma ci-dessus. Mais l'utilisation de ce modèle ne fonctionne PAS dans le projet de bibliothèque de classes multiples. S'il vous plaît aidez-moi à comprendre comment cela fonctionne dans un scénario de bibliothèque de classes multiples. Pourquoi ils ont abandonné le ConfigurationManager je ne sais pas, c'était beaucoup plus facile.
Exécution de l'un projet mettre un point d'arrêt sur le ca AddSingleton ll (dans StartUp.cs) donne un emailConfig nul. donc cela ne fonctionne pas, même chose que les méthodes OP. – dinotom
Si cela donne un résultat nul alors il n'a pas chargé sa configuration d'application correctement. Ce code est tiré de mon application mvc personnelle, donc je sais que cela fonctionne. Si vous définissez une variable sur le retour de getection, je vais me coucher il retourne null – willthiswork89