La Configuration.GetSection dans Asp.Net Core 2.0 obtenir tous les paramètres
Je suis en train d'apprendre les différentes façons de récupérer des informations de configuration afin que je puisse déterminer la meilleure voie à suivre pour configurer et utiliser la configuration pour un projet à venir.
Je peux accéder aux différents paramètres à 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")
};
J'ai aussi besoin de pouvoir compter paramètres, déterminer les valeurs de certains paramètres, etc. J'ai donc été la construction d'une analyse de la méthode pour faire ce genre de choses et avait besoin de toute une section du fichier de paramètres, qui est ce que j'ai supposé GetSection fait.
Mal.
appsettings fichier
{
"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");
retourne
Quelques questions se posent.
- Pourquoi est-ce le retour des 3 différents JsonConfigurationProviders, qui comprend tous les paramètres dans le appsettings.fichier json (montré dans l'Image 2)
- Pourquoi n'est-ce pas GetSection("ConnectionStrings") actuall faire juste cela, retour le de sous des enfants de la ConnectionStrings
- Donné le numéro 2, comment avez-vous fait juste récupérer les enfants de ConnectionStrings ?
- En supposant un modèle ConnectionStrings, avec une propriété, la Liste des Connexions, la section de l'être converti à un objet?
- Vous devriez prendre du temps et de l'examen de la documentation. docs.microsoft.com/en-us/aspnet/core/fundamentals/...
- Ces méthodes sont destinées à être utilisées lors de la configuration de liaisons de configuration. Ils ne sont pas pour l'analyse.
- que de toute évidence...je suis conscient que je peux récupérer les paramètres de la manière décrite dans ces documents, mais la description de GetSection est "Obtient une configuration paragraphe avec la clé spécifiée" ... donc je ne reçois pas pourquoi l'ensemble du dossier est retourné et pas seulement les clés enfants. Je devrais être capable de faire les deux section var = Configuration.GetSection("ConnectionStrings"); et la section var = Configuration["ConnectionStrings"] et de l'avoir de retour la même chose
- Vous pourriez examiner le code source sur GitHub, pour comprendre comment ils ont codé leur.
- J'ai passé en revue tout le code, testé quelques dizaines de variantes de récupération et de toujours trouver aucun moyen de recevoir les enfants d'un parent de la appsettings fichier. GetSection retourne un IConfigurationSection, qui a la Clé, le Chemin, la Valeur des propriétés, certainement GetSection("ConnectionStrings").Valeur de retour, les enfants, mais ne le fait pas. Je peux récupérer tous les paramètres individuels à l'aide de la Configuration["keyhere"] syntaxe donc je sais de configuration lui-même travaille.
Vous devez vous connecter pour publier un commentaire.
selon ce post
https://github.com/aspnet/Configuration/issues/716
GetSection("Name").Value
retournera null, vous devez utiliserGetChildren
pour obtenir les éléments enfantsBind
peut pas travailler contre votre objet, assurez-vous que les propriétés sontpublic
Get<T>()
plus de connexion, il vous sera fortement typé instance de l'objet de configurationessayer un simple POCO de votre classe (pas de complexe de lecture/définition, tous les publics, pas de méthodes) et puis à partir de là
Si vous utilisez
GetSections()
avecBind()
vous devriez être capable de créer des objets poco pour votre utilisation.Ceci devrait revenir à la vous a poco objet avec toutes les valeurs établies.
Si vous utilisez la méthode de liaison de l'objet retourné par GetSection, alors ce serait lier les paires clé-valeur au sein de la section correspondante dans les propriétés de l'objet auquel il a été lié de trop.
Par exemple,
..
Si vous avez besoin d'avoir une section avec des "GetSection" et (clé,valeur), essayez ceci:
et obtenir une Collection de clés avec vallues, peut manipuler à l'aide de LinQ