Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung zum Lesen von Konfigurationsdateien im ASP.NET Core-Klassenbibliotheksprojekt

Ausführliche Erläuterung zum Lesen von Konfigurationsdateien im ASP.NET Core-Klassenbibliotheksprojekt

黄舟
黄舟Original
2017-10-14 10:01:092837Durchsuche

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Lesen der Konfigurationsdatei im ASP.NET Core-Klassenbibliotheksprojekt ein. Der Artikel stellt sie im Detail vor Es wird für jeden hilfreich sein und beim Lernen oder Arbeiten hilfreich sein. Freunde, die es benötigen, können dem Herausgeber folgen, um einen Blick darauf zu werfen.

Vorwort

Kürzlich fragte mich ein Freund, wie man die Konfigurationsdatei in der .net-Kernklassenbibliothek liest Wie großartig, wusste ich nicht, also habe ich in den letzten zwei Tagen von den relevanten Inhalten erfahren und dieser Artikel erschien. Normalerweise haben wir eine appsettings.json-Datei im Anwendungsverzeichnis, in der die relevanten Konfigurationen abgelegt werden Wenn ich jedoch ein Klassenbibliotheksprojekt erstelle, werden einige Konfigurationen wie Schlüssel oder andere Daten, die fest codiert werden müssen, in einer JSON-Datei abgelegt. Vor .net Core ist die Konfigurationsdatei web.config Verwandte Klassen zum Lesen der Daten auf dem Knoten. Daten sind jetzt eine JSON-Datei im .net-Kern. Was sollen wir also tun? Dieser Artikel ist entstanden.

.NET Core-Klassenbibliotheksprojekt liest JSON-Konfigurationsdatei

Um eine JSON-Datei im Anwendungsverzeichnis hinzuzufügen, konfigurieren Sie sie wie folgt:


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

Dann lesen Sie den Knoten der Konfigurationsdatei wie folgt:


public void ConfigureServices(IServiceCollection services)
  {

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

Aber wenn der Projekt ist in der Klasse In der Bibliothek können wir natürlich auch die Konfigurationswerte in appsettings.json unter der Anwendung ablegen, aber um zu verhindern, dass die JSON-Datei sehr aufgebläht aussieht, sollten wir die Konfigurationsdaten in der Klasse ablegen Zur einheitlichen Verwaltung müssen wir uns also eine andere Lösung überlegen. Wir können die Klasse „startup.cs“ nicht in der Klassenbibliothek erstellen und dann die Konfiguration instanziieren . Ich habe es nicht versucht. Können wir nicht einfach Klassen verwenden, um web.config zu lesen? Wir müssen nur den Schlüssel angeben und den Wert abrufen? Mit anderen Worten: Die Richtung, in die wir versuchen, sollte eine einheitliche Verwaltung von Konfigurationsdaten durch eine starke Typkonfiguration sein. Okay, nachdem wir das alles gesagt haben, fangen wir an. Sehen wir uns zunächst an, wie Sie den Anwendungspfad in .net Core erhalten.

.NET Core ruft den Anwendungspfad ab

Das Abrufen des aktuellen Stammpfads und Namens der Anwendung vor .NET 4.X kann wie folgt erfolgen Rufen Sie


var basePath = AppDomain.CurrentDomain.BaseDirectory;
var appName = AppDomain.CurrentDomain.ApplicationIdentity.FullName;

ab. Natürlich können Sie statt des Bin-Verzeichnisses auch das Stammverzeichnis der Anwendung abrufen, indem Sie wie folgt vorgehen:


Directory.GetCurrentDirectory()

Es ist prägnanter, den Bin-Verzeichnispfad im .net Core wie folgt zu erhalten.


AppContext.BaseDirectory

Abrufen des Namens des Anwendungssatzes vor .NET 4.X durch:


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

In .net Core erhalten Sie es wie folgt:


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

Rufen Sie die Version wie folgt ab (dasselbe gilt für .net Core):


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

Im Klassenbibliotheksprojekt verwenden wir eine starke Typkonfiguration, um Konfigurationsdateidaten zu lesen. Zuerst müssen wir die folgende Erweiterung herunterladen.

Fügen Sie in der ConfigurationBuilder-Klasse die folgende Add-Methode hinzu:


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

Für die AddJsonFile-Erweiterungsmethode zum Hinzufügen von JSON The Dateiname und Dateipfad wurden über die SetBasePath()-Methode implementiert. Alle Konfigurationen basieren auf der IConfigurationBuilder-Schnittstelle, die eine JsonConfigurationSource-Klasse enthält, die wie folgt implementiert ist:


//
 // 摘要:
 //  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);
 }

Schauen wir uns die übergeordnete Klasse an und es gibt eine Methode zum Hinzufügen eines JSON-Dateipfads wie folgt:

Von hier aus können wir also sehen, dass die Methode von Das Hinzufügen einer JSON-Datei erfolgt nicht über die Erweiterungsmethode. Zusätzlich zur Implementierung gibt es auch eine direkte Instanziierung von JsonConfigurationSource wie folgt:


IConfiguration config = new ConfigurationBuilder()
    .SetBasePath(currentClassDir)
    .AddJsonFile("appsettings.json", false, true)
    .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
    .Build();

Sie können Ich habe festgestellt, dass beim Hinzufügen einer JSON-Datei das Verzeichnis festgelegt werden muss, in dem sich die JSON-Datei befindet. Andernfalls wird der folgende Fehler gemeldet 🎜>

Erstellen wir eine Test-JSON-Datei und platzieren Sie sie wie folgt im aktuellen Projekt (StudyEFCore.Data):

Lesen Sie abschließend das Klassenbibliotheksprojekt JSON-Konfigurationsdatei und kapseln Sie sie wie folgt:


Es gibt ein ungelöstes Problem aus dem oben genannten, nämlich wie man den Pfad des aktuellen Klassenbibliotheksprojekts erhält. Mir ist kein guter Weg eingefallen. Ich frage mich, ob Sie nach dem Lesen dieses Artikels einen Rat haben. Der kurze Aufruf lautet wie folgt:

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


Das Ergebnis lautet wie folgt:

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

总结

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung zum Lesen von Konfigurationsdateien im ASP.NET Core-Klassenbibliotheksprojekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn