Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in Abhängigkeitsinjektionsmethoden in der .NET-Konfigurations-JSON

Einführung in Abhängigkeitsinjektionsmethoden in der .NET-Konfigurations-JSON

Y2J
Y2JOriginal
2017-05-13 11:28:131871Durchsuche

In diesem Artikel wird hauptsächlich die detaillierte Erklärung der ASP.NET Core-Konfiguration der Abhängigkeitsinjektion in JSON-Dateien vorgestellt. Der Herausgeber findet es recht gut, daher werde ich es jetzt mit Ihnen teilen und als Referenz geben. Folgen wir dem Editor, um einen Blick darauf zu werfen

Vorwort

Im vorherigen Artikel habe ich geschrieben, wie man die globale Konfiguration in MVC Routing Präfix, heute werde ich Ihnen vorstellen, wie Sie die Abhängigkeitsinjektion in einer JSON-Datei konfigurieren.

Im vorherigen ASP.NET 4+ (MVC, Web

Api, Owin, SingalR usw.) wurde eine proprietäre Schnittstelle für die Verwendung in Abhängigkeiten von Drittanbietern bereitgestellt Injektionskomponenten, wie wir sie häufig von Autofac, Untiy, String.Net usw. verwenden. Diese Abhängigkeitsinjektionskomponenten von Drittanbietern bieten im Wesentlichen eine Reihe von Konfigurationsinjektionen oder Konfigurations-Lebenszyklusmethoden Zusätzlich zur direkten Konfiguration in der Klasse bietet es auch die Möglichkeit, entweder xml-Dateien oder JSON usw. zu verwenden. Im neuen ASP.NET Core hat uns Microsoft standardmäßig eine Abhängigkeitsinjektion bereitgestellt Funktion müssen wir nicht mehr auf Komponenten von Drittanbietern zurückgreifen, um die Abhängigkeitsinjektion zu implementieren, aber manchmal möchten wir die Abhängigkeitsinjektion in der Konfigurationsdatei konfigurieren. Wir erhalten keine Konfiguration Daher müssen wir die Funktion dieses Konfigurationselements selbst implementieren. Persönlich bin ich der Meinung, dass die Hauptverwendungsszenarien Orte sind, an denen die Implementierung zur Kompilierungszeit nicht bestimmt werden kann und die Implementierung dynamisch geändert werden muss.

Sehen wir uns an, wie das geht.

Erste Schritte

Zuerst erstellen wir in der Anwendung eine Schnittstelle für die DI-Nutzung:



public interface IFoo
{
  string GetInputString(string input);
}
Dann fügen Sie eine Implementierung der

Schnittstelle Foo hinzu IFoo


public class Foo : IFoo
{
  public string GetInputString(string input)
  {
    return $"输入的字符串为:{ input }";
  }
}
Als nächstes müssen wir die obige

Schnittstelle hinzufügen und ihre Implementierung werden der Methode IFoo in der Datei Startup.cs hinzugefügt. Sie wird hauptsächlich zum Konfigurieren von Abhängigkeitsinjektionsdiensten verwendet. Fügen Sie dann Dienste über den von dieser Methode bereitgestellten Schnittstellenparameter ConfigureServices ein. ISerciceCollection


public void ConfigureServices(IServiceCollection services)
{
  services.Add(new ServiceDescriptor(serviceType: typeof(IFoo), 
                    implementationType: typeof(Foo), 
                    lifetime: ServiceLifetime.Transient));
}
Hier verwenden wir die Add-Methode in IServiceCollection, um eine Implementierung von

mit einem vorübergehenden Lebenszyklus hinzuzufügen. Transient bedeutet, dass bei jeder Anforderung eine Instanz von IFoo erstellt wird. Foo

Das Obige ist die von Microsoft bereitgestellte Standardmethode zum Hinzufügen der Abhängigkeitsinjektion. Schauen wir uns an, wie wir sie in die Art umwandeln, die wir für die Verwendung von JSON-Dateien benötigen.

JSON-Dateien zum Konfigurieren von DI verwenden

Wenn wir JSON-Dateien zum Konfigurieren der Abhängigkeitsinjektion verwenden, können wir wählen, ob wir eine neue JSON-Datei erstellen oder die Datei appsettings.json verwenden möchten direkt. Jetzt fügen wir die DI-Konfiguration direkt zur Datei appsettings.json hinzu.

appsettings.json


 "Logging": {
  "IncludeScopes": false,
  "LogLevel": {
   "Default": "Debug",
   "System": "Information",
   "Microsoft": "Information"
  }
 },

 "DIServices": [
  {
   "serviceType": "[namesapce].IFoo",
   "implementationType": "[namesapce].Foo",
   "lifetime": "Transient"
  }
 ]
}
Fügen Sie zunächst einen

Array-Knoten mit dem Namen „DIServices“ hinzu, der ein Oder-Mehrfach- Objekte , die den Dienst konfigurieren, stellt den Typ der Dienstschnittstelle dar, die Implementierung der Schnittstelle und serviceType initialisiert den Lebenszyklus der Instanz. implementationTypelifetime

Hinweis

: Der Typ in der Konfigurationsdatei muss ein vollständiger Name sein, d. h. den Namespace enthalten. Als nächstes fügen Sie eine Serviceklasse hinzu, die dem Json-Dateikonfigurationselement entspricht. Hier müssen wir die Newtonsoft-JSON-Bibliothek verwenden.



Dann müssen Sie die ConfigureServices ändern, lesen Sie einfach die JSON-Datei der Konfiguration
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

public class Service
{
  public string ServiceType { get; set; }

  public string ImplementationType { get;set; }

  [JsonConverter(typeof(StringEnumConverter))]
  public ServiceLifetime Lifetime { get; set; }
}
in

. ConfigureServices


Anschließend testen wir, ob es verfügbar ist.

public void ConfigureServices(IServiceCollection services)
{
  //services.Add(new ServiceDescriptor(serviceType: typeof(IFoo),
  //            implementationType: typeof(Foo),
  //            lifetime: ServiceLifetime.Transient));

  var jsonServices = JObject.Parse(File.ReadAllText("appSettings.json"))["DIServices"];
  var requiredServices = JsonConvert.DeserializeObject<List<Service>>(jsonServices.ToString());

  foreach (var service in requiredServices) {
    services.Add(new ServiceDescriptor(serviceType: Type.GetType(service.ServiceType),
                      implementationType: Type.GetType(service.ImplementationType),
                      lifetime: service.Lifetime));
  }
}

Testen

Öffnen und Injektionselemente hinzufügen:

HomeController.cs


in Der

-Konstruktor
public class HomeController : Controller
{
  private readonly IFoo _foo;

  public HomeController(IFoo foo) 
  {
    _foo = foo;
  }

  public IActionResult About() 
  {
    ViewData["Message"] = _foo.GetInputString("Your application description page.");

    return View();
  }
}
von HomeController fügt die IFoo-Schnittstelle hinzu und verwendet sie dann in der Aktion von About.

Führen Sie das Programm aus, öffnen Sie die Seite, klicken Sie auf die Registerkarte „Info“


Zusammenfassung

Im Folgenden erfahren Sie, wie Sie die Abhängigkeitsinjektion in eine JSON-Datei in ASP.NET Core konfigurieren. Dies ist nur ein einfaches Beispiel und sollte nicht in einer Produktionsumgebung verwendet werden. In tatsächlichen Projekten müssen Sie sich auch mit Problemen wie Ausnahmen beim Lesen der Konfiguration, der Existenz des Dienstes, dem Lebenszyklus usw. befassen.

【Verwandte Empfehlungen】

1. Besondere Empfehlung: Version „php Programmer Toolbox“ V0.1 herunterladen

2. Kostenloses ASP-Video-Tutorial

3. Li Yanhui ASP-Basis-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEinführung in Abhängigkeitsinjektionsmethoden in der .NET-Konfigurations-JSON. 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