Maison > développement back-end > Tutoriel C#.Net > Explication détaillée de la façon de lire les fichiers de configuration dans le projet de bibliothèque de classes ASP.NET Core

Explication détaillée de la façon de lire les fichiers de configuration dans le projet de bibliothèque de classes ASP.NET Core

黄舟
Libérer: 2017-10-14 10:01:09
original
2876 Les gens l'ont consulté

Cet article vous présente principalement les informations pertinentes sur la façon de lire le fichier de configuration dans le projet de bibliothèque de classes ASP.NET Core. Il s'agit d'une question soulevée par un ami. L'article la présente en détail à travers l'exemple de code. sera utile à tout le monde. Il a une certaine valeur de référence et d'apprentissage lorsqu'ils étudient ou travaillent. Les amis qui en ont besoin peuvent suivre l'éditeur pour y jeter un œil.

Avant-propos

Récemment, un ami m'a demandé comment lire le fichier de configuration dans la bibliothèque de classes principale .net. confus. Comme c'est génial, je ne le savais pas, alors j'ai découvert le contenu pertinent au cours des deux derniers jours et cet article est apparu Normalement, nous avons un fichier appsettings.json dans le répertoire de l'application, et les configurations pertinentes seront placées dedans. ce fichier json. Mais si je construis un projet de bibliothèque de classes, certaines configurations telles que les clés ou autres données qui doivent être codées en dur sont placées dans un fichier JSON avant le noyau .net, le fichier de configuration est web.config et il y en a. classes associées pour lire les données sur le nœud. Les données sont désormais un fichier json dans le noyau .net, alors que devons-nous faire ? Cet article a vu le jour.

Le projet de bibliothèque de classes .NET Core lit le fichier de configuration JSON

Pour ajouter un fichier JSON dans le répertoire de l'application, configurez-le comme suit :


var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
    .AddEnvironmentVariables();
    Configuration = builder.Build();
Copier après la connexion

Lisez ensuite le nœud du fichier de configuration, comme suit :


public void ConfigureServices(IServiceCollection services)
  {

   services.Configure<BlogViewModel>(Configuration.GetSection("JeffckySettings"));
   ......
   }
Copier après la connexion

Mais si le le projet est dans la classe Dans la bibliothèque, bien sûr, nous pouvons également mettre les valeurs de configuration dans appsettings.json sous l'application, mais afin d'éviter que le fichier json ne paraisse très volumineux, nous devrions mettre les données de configuration dans la classe bibliothèque dans la bibliothèque de classes. Pour une gestion unifiée, nous devons donc penser à une autre solution. Nous ne pouvons pas créer la classe startup.cs dans la bibliothèque de classes, puis instancier la configuration. Il devrait être possible d'y penser de cette façon. . Je ne l'ai pas essayé. N'y a-t-il pas un moyen simple ? Ne pouvons-nous pas utiliser des classes pour lire web.config comme avant .net core ? En d’autres termes, la gestion unifiée des données de configuration via une configuration de type forte devrait être la direction dans laquelle nous essayons. Bon, cela dit, commençons. Voyons d'abord comment obtenir le chemin de l'application dans le noyau .net.

.NET Core obtient le chemin de l'application

Obtenir le chemin racine et le nom de l'application actuelle avant .NET 4.X peut être effectué comme suit Obtenez


var basePath = AppDomain.CurrentDomain.BaseDirectory;
var appName = AppDomain.CurrentDomain.ApplicationIdentity.FullName;
Copier après la connexion

Bien entendu, vous pouvez également obtenir le répertoire racine de l'application au lieu d'obtenir le répertoire bin en procédant comme suit :


Directory.GetCurrentDirectory()
Copier après la connexion

Il est plus concis d'obtenir le chemin du répertoire bin dans le noyau .net comme suit.


AppContext.BaseDirectory
Copier après la connexion

L'obtention du nom de l'ensemble d'applications avant .NET 4.X a été obtenue par :


Assembly.GetEntryAssembly().GetName().Name;
Copier après la connexion

Dans .net core, récupérez-le comme suit :


var name = typeof(T).GetTypeInfo().Assembly.GetName().Name;
Copier après la connexion

Obtenez la version comme suit (il en va de même pour .net core) :


Assembly.GetEntryAssembly().GetName().Version.ToString()
Copier après la connexion

Dans le projet de bibliothèque de classes, nous utilisons une configuration de type fort pour lire les données du fichier de configuration. Nous devons d'abord télécharger l'extension suivante.

Dans la classe ConfigurationBuilder, ajoutez la méthode Add suivante :


//
  // 摘要:
  //  Adds a new configuration source.
  //
  // 参数:
  // source:
  //  The configuration source to add.
  //
  // 返回结果:
  //  The same Microsoft.Extensions.Configuration.IConfigurationBuilder.
  public IConfigurationBuilder Add(IConfigurationSource source);
Copier après la connexion

Pour que la méthode d'extension AddJsonFile ajoute JSON. le nom et le chemin du fichier ont été implémentés via la méthode SetBasePath(). Toutes les configurations sont basées sur l'interface IConfigurationBuilder, qui comprend une classe JsonConfigurationSource, qui est implémentée comme suit :


<🎜. >
//
 // 摘要:
 //  Represents a JSON file as an Microsoft.Extensions.Configuration.IConfigurationSource.
 public class JsonConfigurationSource : FileConfigurationSource
 {
  public JsonConfigurationSource();

  //
  // 摘要:
  //  Builds the Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
  //  for this source.
  //
  // 参数:
  // builder:
  //  The Microsoft.Extensions.Configuration.IConfigurationBuilder.
  //
  // 返回结果:
  //  A Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider
  public override IConfigurationProvider Build(IConfigurationBuilder builder);
 }
Copier après la connexion
Regardons sa classe parent et il existe une méthode pour ajouter un chemin de fichier JSON, comme suit :

Nous pouvons donc voir d'ici que la méthode de l'ajout d'un fichier JSON se fait autrement que via la méthode d'extension. En plus de l'implémentation, il existe également une instanciation directe de JsonConfigurationSource, comme suit :


IConfiguration config = new ConfigurationBuilder()
    .SetBasePath(currentClassDir)
    .AddJsonFile("appsettings.json", false, true)
    .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
    .Build();
Copier après la connexion
Vous pouvez. ajoutez des fichiers JSON comme ci-dessus. J'ai trouvé que l'ajout d'un fichier JSON doit définir le répertoire dans lequel se trouve le fichier JSON. Autrement dit, la méthode SetBasePath doit être définie en premier, sinon l'erreur suivante sera signalée :

<. 🎜>

Créons un fichier JSON de test et plaçons-le dans le projet en cours (StudyEFCore.Data) comme suit :

Lisons enfin le projet de bibliothèque de classes Fichier de configuration JSON et encapsulez-le pour qu'il ressemble à ceci :


Il y a un problème non résolu ci-dessus, qui est de savoir comment obtenir le chemin de la bibliothèque de classes actuelle. projet. Je n'ai pas pensé à un bon moyen. Je me demande si vous avez des conseils après avoir lu cet article. L'appel court est le suivant :
public class JsonConfigurationHelper
 {
  public T GetAppSettings<T>(string key) where T : class, new()
  {
   var baseDir = AppContext.BaseDirectory;
   var indexSrc = baseDir.IndexOf("src");
   var subToSrc = baseDir.Substring(0, indexSrc);
   var currentClassDir = subToSrc + "src" + Path.DirectorySeparatorChar + "StutdyEFCore.Data";

   IConfiguration config = new ConfigurationBuilder()
    .SetBasePath(currentClassDir)
    .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
    .Build();
   var appconfig = new ServiceCollection()
    .AddOptions()
    .Configure<T>(config.GetSection(key))
    .BuildServiceProvider()
    .GetService<IOptions<T>>()
    .Value;
   return appconfig;
  }
 }
Copier après la connexion


Le résultat est le suivant :
 var config = new JsonConfigurationHelper();
   var person = config.GetAppSettings<Person>("JeffckySettings");
   var name = person.Name;
   var age = person.Age;
Copier après la connexion

我们将其类修改为ConfigurationManager,然后将其GetAppSettings方法定义为静态方法,最后如下调用是不是满足了在.net core之前读取web.config中配置数据的问题。哈哈哈:


var person = ConfigurationManager.GetAppSettings<Person>("JeffckySettings");
Copier après la connexion

总结

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal