J'essaie d'apprendre les différentes manières de récupérer des informations de configuration afin de pouvoir déterminer le meilleur chemin pour configurer et utiliser la configuration d'un projet à venir.
Je peux accéder aux différents paramètres individuels à l'aide de
var sm = new SmsSettings
{
FromPhone = Configuration.GetValue<string>("SmsSettings:FromPhone"),
StartMessagePart = Configuration.GetValue<string>("SmsSettings:StartMessagePart"),
EndMessagePart = Configuration.GetValue<string>("SmsSettings:EndMessagePart")
};
Je dois également pouvoir compter les paramètres, déterminer les valeurs de certains paramètres, etc. Ainsi, je construisais une méthode d'analyse syntaxique pour effectuer ce type de tâche. J'avais besoin de toute une section du fichier de paramètres, ce que je suppose que GetSection a fait .Faux.
fichier appsettings
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=TestingConfigurationNetCoreTwo;Trusted_Connection=True;MultipleActiveResultSets=true",
"ProductionConnection": "Server=(localdb)\\mssqllocaldb;Database=TestingConfigurationNetCoreTwo_Production;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"SmsSettings": {
"FromPhone": "9145670987",
"StartMessagePart": "Dear user, You have requested info from us on starting",
"EndMessagePart": "Thank you."
}
}
Ci-dessous sont les deux captures d'écran de ce que
var section = Configuration.GetSection("ConnectionStrings");
résultats
Quelques questions se posent.
selon ce post
https://github.com/aspnet/Configuration/issues/716
GetSection("Name").Value
retournera null, vous devez utiliser GetChildren
pour obtenir les éléments enfantsBind
peut ne pas fonctionner sur votre objet, assurez-vous que les propriétés sont public
Get<T>()
sur bind, il vous fournira une instance fortement typée de l'objet de configurationessayez un simple POCO de votre classe (pas de getter/setters complexe, tout public, pas de méthodes) et prenez-le ensuite
Si vous utilisez GetSections()
avec Bind()
, vous devriez pouvoir créer des objets poco pour votre usage.
var poco= new PocoClass();
Configuration.GetSection("SmsSettings").Bind(poco);
Cela devrait vous retourner un objet poco avec toutes les valeurs définies.
Si vous utilisez la méthode Bind sur l'objet renvoyé par GetSection, les paires clé/valeur de la section seront alors liées aux propriétés correspondantes de l'objet auquel il a été lié.
Par exemple,
class ConnectionStrings {
public string DefaultConnection { get; set;}
public string ProductionConnection {get; set;}
}
..
var connectionStrings = new ConnectionStrings();
var section = Configuration.GetSection("ConnectionStrings").Bind(connectionStrings);