In de nieuwe ASP.NET Core worden veel afhankelijkheidsinjecties gebruikt om code te schrijven.
Bijvoorbeeld, in onze Startup-cursus zien we het volgende:
AddMvc AddDbContext bevat de AddDirectoryBrowser die we eerder gebruikten voor directoryrondleidingen:
Het zijn allemaal frameworks die goede diensten leveren, en we kunnen ze direct gebruiken door ze toe te voegen.
Inversie van Controle (IoC) is een ontwerpprincipe in objectgeoriënteerd programmeren dat kan worden gebruikt om de koppeling tussen computercode te verminderen. De meest gebruikte methode heet Dependency Injection (DI), en er is ook een methode genaamd "Dependency Lookup". Door de inversie te beheersen, geeft een externe entiteit die alle objecten in het systeem aanstuurt bij het aanmaken van een object een referentie naar het object waarop het afhankelijk is. Er kan ook gezegd worden dat afhankelijkheden in het object worden geïnjecteerd. Om de ioc te gebruiken, moet de Startup-klasse verwijzen naar Microsoft.Extensions.DependencyInjection(ps), wat al vrij eenvoudig is: Microsoft.. Uitbreid... Afhankelijkheidsinjectie - - ,)
Injecteer de levenscyclus van een dienst
Microsoft biedt 3 levenscycli voor zelf-geïnjecteerde diensten.
Voorbijgaand
Een instantane levenscyclusdienst die wordt gecreëerd telkens wanneer deze wordt aangevraagd. Deze levenscyclus is het meest geschikt voor lichte, stateloze diensten.
Scoped
In dezelfde scope wordt de dienst slechts één keer per verzoek aangemaakt.
Singleton (alleen)
De globale wordt slechts één keer aangemaakt, de eerste keer dat deze wordt opgevraagd, en daarna wordt hij altijd gebruikt.
Hoe gebruik je deze drie levenscycli? We kunnen verschillende methoden direct gebruiken bij het injecteren, de code is als volgt:
Laten we de specifieke generatie van deze drie levenscycli testen.
We schrijven drie interfaces met verschillende namen en 3 verschillende klassen om de interfaces te implementeren, als volgt:
In de constructor van elke implementatieklasse genereren we een nieuwe GUID, waarmee we kunnen bepalen of de klasse de constructor opnieuw heeft uitgevoerd.
Injecteer services in de controller
Er zijn over het algemeen drie manieren van injectie: constructorinjectie, methode-injectie en attribuutinjectie. Microsofts eigen IOC-container gebruikt standaard constructor-injectie (Attribuutinjectie wordt niet ondersteund, maar dit kan worden bereikt met een vervanging van een derde partij container)
Bekijk paginacode:
Voer het project uit en gebruik toegang via 2 verschillende browsers, zoals hieronder weergegeven:
We ontdekten dat de GUID's die twee keer in de onmiddellijke levenscyclus worden gegenereerd inconsistent zijn, wat aangeeft dat het object niet hetzelfde is.
De scope lifecycle is echter hetzelfde, omdat onder dezelfde scope de GUID van de dienst die tweemaal in dezelfde browser wordt gebruikt hetzelfde is, wat aangeeft dat hetzelfde object wordt gebruikt.
In het geval van een singleton hebben twee verschillende browsers altijd toegang tot dezelfde GUID, wat aangeeft dat hetzelfde object wordt aangeroepen.
(Einde)
|