Maison  >  Article  >  développement back-end  >  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

黄舟
黄舟original
2017-10-14 10:01:092817parcourir

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();

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


public void ConfigureServices(IServiceCollection services)
  {

   services.Configure<BlogViewModel>(Configuration.GetSection("JeffckySettings"));
   ......
   }

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;

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()

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


AppContext.BaseDirectory

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


Assembly.GetEntryAssembly().GetName().Name;

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


var name = typeof(T).GetTypeInfo().Assembly.GetName().Name;

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


Assembly.GetEntryAssembly().GetName().Version.ToString()

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);

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);
 }
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();
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;
  }
 }


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

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


var person = ConfigurationManager.GetAppSettings<Person>("JeffckySettings");

总结

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!

Déclaration:
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