|
|
Veröffentlicht am 07.05.2019 13:55:10
|
|
|
|

Im neuen ASP.NET Core werden zahlreiche Abhängigkeitsinjektionen verwendet, um Code zu schreiben.
Zum Beispiel sehen wir in unserem Startup-Kurs Folgendes:
AddMvc AddDbContext beinhaltet den AddDirectoryBrowser, den wir zuvor für Verzeichnisführungen verwendet haben:
Das sind alles Frameworks, die gute Dienstleistungen anbieten, und wir können sie direkt nutzen, indem wir sie einschleusen.
Die Inversion der Steuerung (IoC) ist ein Designprinzip in der objektorientierten Programmierung, das verwendet werden kann, um die Kopplung zwischen Computercode zu verringern. Die gebräuchlichste Methode heißt Dependency Injection (DI), und es gibt auch eine Methode namens "Dependency Lookup". Durch die Steuerung der Inversion übergibt eine externe Entität, die alle Objekte im System kontrolliert, beim Erstellen eines Objekts eine Referenz auf das Objekt, von dem es abhängig ist. Man kann auch sagen, dass Abhängigkeiten in das Objekt eingeschleust werden. Um die IOC zu verwenden, muss die Startup-Klasse auf Microsoft.Extensions.DependencyInjection(ps) verweisen, was bereits ziemlich unkompliziert ist: Microsoft.. Erweitern... Abhängigkeitsinjektion – - ,)
Injektion des Lebenszyklus eines Dienstes
Microsoft bietet drei Lebenszyklen für selbstinjizierte Dienste an.
Transient
Ein sofortiger Lebenszyklusdienst, der jedes Mal erstellt wird, wenn er angefordert wird. Dieser Lebenszyklus eignet sich am besten für leichte, staatenlose Dienste.
Zielfernrohr
Im gleichen Umfang wird der Dienst nur einmal pro Anfrage erstellt.
Singleton (Nur)
Der globale wird nur einmal erstellt, beim ersten Mal, wenn er angefordert wird, und dann wird er immer verwendet.
Wie nutzt du diese drei Lebenszyklen? Wir können beim Einspritzen direkt verschiedene Methoden verwenden, der Code ist wie folgt:
Testen wir die spezifische Generation dieser drei Lebenszyklen
Wir schreiben drei Schnittstellen mit unterschiedlichen Namen und drei verschiedenen Klassen, um die Schnittstellen wie folgt zu implementieren:
Im Konstruktor jeder Implementierungsklasse generieren wir ein neues GUID, das es uns ermöglicht zu bestimmen, ob die Klasse den Konstruktor erneut ausgeführt hat.
Dienste in den Controller injizieren
Es gibt im Allgemeinen drei Arten der Injektion: Konstruktorinjektion, Methodeninjektion und Attributinjektion. Microsofts eigener IOC-Container verwendet standardmäßig Constructor-Injection (Attributinjektion wird nicht unterstützt, aber das kann mit einem Drittanbieter-Containerersatz erreicht werden)
Seitencode anzeigen:
Führen Sie das Projekt aus und greifen Sie über zwei verschiedene Browser darauf zu, wie unten gezeigt:
Wir stellten fest, dass die zweimal im momentanen Lebenszyklus erzeugten GUIDs inkonsistent sind, was darauf hindeutet, dass das Objekt nicht dasselbe ist.
Der Umfangszyklus ist jedoch derselbe, da unter demselben Umfang die GUID des zweimal im selben Browser verwendeten Dienstes gleich ist, was darauf hinweist, dass dasselbe Objekt verwendet wird.
Im Fall eines Singletons greifen zwei verschiedene Browser immer auf denselben GUID zu, was darauf hinweist, dass dasselbe Objekt aufgerufen wird.
(Ende)
|
Vorhergehend:.NET Core Entity verwendet Entity Framework Core, um Datenbanken zu verknüpfenNächster:ASP.NET Core verwendet Autofac, um IOC-Injektionen zu implementieren
|