Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 36245|Antwoord: 1

[.NET Core] ASP.NET Core dependency injection gebruikt de IOC-container die erbij hoort

[Link kopiëren]
Geplaatst op 07-05-2019 13:55:10 | | | |
ASP.NET Core dependency injection gebruikt de IOC-container die erbij hoort
https://www.itsvse.com/thread-7562-1-1.html
(Bron: Architect_Programmer)

ASP.NET Core gebruikt Autofac om IOC-injectie te implementeren
https://www.itsvse.com/thread-7563-1-1.html
(Bron: Architect_Programmer)

ASP.NET Core gebruikt Autofac om AOP-onderschepping te implementeren
https://www.itsvse.com/thread-7566-1-1.html
(Bron: Architect_Programmer)

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)






Vorig:.NET Core Entity gebruikt Entity Framework Core om databases te koppelen
Volgend:ASP.NET Core gebruikt Autofac om IOC-injectie te implementeren
 Huisbaas| Geplaatst op 09-03-2022 11:00:35 |
Vervang services in de ingebouwde DI-containers van ASP.NET Core

Code:





Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com