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, WebApi, 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); }
Schnittstelle Foo hinzu IFoo
public class Foo : IFoo { public string GetInputString(string input) { return $"输入的字符串为:{ input }"; } }
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)); }
mit einem vorübergehenden Lebenszyklus hinzuzufügen. Transient bedeutet, dass bei jeder Anforderung eine Instanz von IFoo
erstellt wird. Foo
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" } ] }
Array-Knoten mit dem Namen „DIServices“ hinzu, der ein Oder-Mehrfach-< enthält 🎜> Objekte , die den Dienst konfigurieren, stellt den Typ der Dienstschnittstelle dar, die Implementierung der Schnittstelle und serviceType
initialisiert den Lebenszyklus der Instanz. implementationType
lifetime
: 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.
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; } }
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
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(); } }
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!