web-dev-qa-db-fra.com

Configuration.GetSection dans Asp.Net Core 2.0 obtenant tous les paramètres

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

 Image 1: variable properties

 Image 2: Drilling down into JsonConfigurationProvider

Quelques questions se posent.

  1. Pourquoi renvoie-t-il 3 fournisseurs JsonConfigurationProviders différents, dont l'un inclut tous les paramètres du fichier appsettings.json (illustré dans l'image 2)
  2. Pourquoi GetSection ("ConnectionStrings") n'effectue-t-il pas exactement cela, en renvoyant les sous-enfants de ConnectionStrings
  3. Étant donné le numéro 2, comment récupérez-vous les enfants de ConnectionStrings?
  4. En supposant un modèle ConnectionStrings, avec une propriété, Lister les connexions, la section peut-elle être convertie en objet?
6
dinotom

selon ce post

https://github.com/aspnet/Configuration/issues/716

  1. la GetSection("Name").Value retournera null, vous devez utiliser GetChildren pour obtenir les éléments enfants
  2. Bind peut ne pas fonctionner sur votre objet, assurez-vous que les propriétés sont public
  3. essayez Get<T>() sur bind, il vous fournira une instance fortement typée de l'objet de configuration

essayez un simple POCO de votre classe (pas de getter/setters complexe, tout public, pas de méthodes) et prenez-le ensuite 

4
dbones

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.

0
JStevens

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);
0
Rufus Lobo