web-dev-qa-db-fra.com

Comment Microsoft.Extensions.Configuration dépend-il exactement d'ASP.NET Core?

ASP.NET Core implémente-t-il un accès IConfiguration aux valeurs de configuration?

Très probablement, ma question s'est posée parce que je ne comprends pas exactement ce qu'est ASP.NET Core. Eh bien, je sais que c'est un framework web, pas sûr, mais on dirait que c'est un espace de noms dans .NET, ou un package ... Je sais qu'en php, un framework pourrait être un ensemble de classes (un espace de noms) ou une bibliothèque compilée qui est fourni comme une extension, donc je suppose une approche similaire dans .NET.

Au départ, je n'avais pas encore l'intention de me concentrer sur ASP.NET Core. J'avais besoin de stocker une configuration pour ma simple application C # sur console (VS Code et .NET Core). J'ai trouvé beaucoup de sujets (par exemple ici: Comment lire les valeurs de config.json dans l'application console ) que pour lire la configuration JSON (recommandée). Compte tenu de cela, j'ai ajouté trois packages de pépites nécessaires:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.FileExtensions;
using Microsoft.Extensions.Configuration.Json;

J'ai besoin d'utiliser:

new ConfigurationBuilder()          
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json").Build();

Cela renvoie un objet qui implémente l'interface IConfigurationRoot/IConfiguration. Mais tous les exemples sont donnés dans un contexte ASP.NET Core. J'ai une application vraiment simple et je n'ai pas encore besoin de fonctionnalités ASP.NET.

J'ai donc essayé d'accéder à IConfigurationRoot sans ASP.NET. L'objet résultant stocke les valeurs du fichier de configuration, mais n'a pas toutes les méthodes de son interface pour y accéder.

Comment expliquer cela dans le contexte des espaces de noms .NET? ASP.NET Core implémente-t-il des méthodes pour accéder aux valeurs de IConfiguration comme Get<T>()?

Si Microsoft.Extensions.Configuration Fait partie ou dépend fortement de Microsoft.AspNetCore.App, Pourquoi se trouve-t-il dans un espace de noms différent?

Si j'ajoute ASP.NET Core (package NuGet et espaces de noms), sera-ce une exagération?

Peut-être devrais-je utiliser autre chose que ConfigurationBuilder pour lire JSON?

8
Vsevolod

Microsoft.Extensions.Configuration , comme les autres packages du Microsoft.Extensions namespace (par exemple Options ou DependencyInjection ), sont des packages qui ont été créés dans le cadre du framework ASP.NET Core. Cependant, la façon dont ASP.NET Core et tous ses packages associés ont été construits est très modulaire, de sorte que toutes les bibliothèques peuvent être utilisées dans le contexte ASP.NET Core, ou sans.

Vous devez comprendre ces packages comme des bibliothèques. Ils sont inclus dans ASP.NET Core car le framework en construit par dessus , mais si vous n'avez pas besoin du framework web ASP.NET Core, vous peut toujours utiliser ces bibliothèques séparément sans aucune mention d'ASP.NET Core. C’est pourquoi ils vivent à l'intérieur du Microsoft.Extensions espace de noms au lieu de Microsoft.AspNetCore: Ce sont des projets complètement séparés. Bien sûr, le développement de ces packages est effectué par l'équipe ASP.NET Core et les décisions de conception d'ASP.NET Core affectent la façon dont ces packages d'extension évoluent; mais l'équipe est très prudente avec ces packages afin que l'utilisation générale ne soit pas affectée.

Donc, tout cela étant dit, comment utilisez-vous ces packages? Comme toute autre bibliothèque, vous y ajoutez simplement une référence NuGet. Puisque Microsoft.Extensions.Configuration est la bibliothèque de base qui ne comprend aucune fonction de chargement de fichiers, vous avez également besoin de Microsoft.Extensions.Configuration.Json si vous souhaitez charger des fichiers JSON.

Mais c'est vraiment simple:

var configuration = new ConfigurationBuilder()
    .AddJsonFile("config.json")
    .Build();

// retrieve configuration values
Console.WriteLine(configuration["foo"]); // bar
Console.WriteLine(configuration["baz:bar"]); // qux

Pour cet exemple, le config.json ressemblait à ceci:

{
    "foo": "bar",
    "baz": {
        "bar": "qux"
    }
}

Vous pouvez donc simplement charger la configuration comme ceci. Assurez-vous de toujours vérifier la documentation . Il peut s'agir de la configuration utilisée à l'intérieur d'ASP.NET Core mais les concepts sous-jacents s'appliquent toujours (par exemple à quoi ressemblent les chemins de configuration , ou comment fonctionne la liaison ).

Enfin, notez que cela est vraiment juste destiné à la configuration. Le chargement de données à partir de JSON n'est qu'une des nombreuses sources de configuration que vous pouvez utiliser avec Microsoft.Extensions.Configuration. Mais quel que soit le fournisseur que vous utiliserez, vous vous retrouverez avec le même format de configuration qui a les concepts de sections et de chemins de clé.

Si vous êtes venu dans le package en regardant comment analyser JSON, il est probable que vous cherchiez le mauvais outil. Si vous souhaitez analyser JSON pour récupérer une structure de données appropriée, comme vous le feriez lorsque vous utilisez JSON comme un moyen de sérialiser des données, vous devez alors envisager quelque chose de différent. La solution la plus courante pour analyser JSON (sérialisation aussi) utilise Json.NET qui est un outil très puissant et flexible pour traiter tout type de données JSON.

25
poke