I den nye ASP.NET Core brukes et stort antall avhengighetsinjeksjoner for å skrive kode.
For eksempel, i vår Startup-klasse kan vi se følgende:
AddMvc AddDbContext inkluderer AddDirectoryBrowser vi brukte til katalogturer før:
De er alle rammeverk som tilbyr gode tjenester, og vi kan bruke dem direkte ved å injisere dem.
Inversjon av kontroll (IoC) er et designprinsipp i objektorientert programmering som kan brukes for å redusere koblingen mellom datakode. Den vanligste metoden kalles Dependency Injection (DI), og det finnes også en metode kalt "Dependency Lookup". Ved å kontrollere inversjonen, når et objekt opprettes, sender en ekstern enhet som kontrollerer alle objekter i systemet en referanse til objektet det er avhengig av. Det kan også sies at avhengigheter injiseres i objektet. For å bruke ioc må Startup-klassen referere til Microsoft.Extensions.DependencyInjection(ps), som allerede er ganske enkelt: Microsoft.. Utvid... Avhengighetsinjeksjon - - ,)
Injiser livssyklusen til en tjeneste
Microsoft tilbyr 3 livssykluser for selvinjiserte tjenester.
Forbigående
En øyeblikkelig livssyklustjeneste som opprettes hver gang den forespørsles. Denne livssyklusen egner seg best for lette, statsløse tjenester.
Scoped
I samme omfang opprettes tjenesten kun én gang per forespørsel.
Singleton (Kun)
Den globale opprettes bare én gang, første gang den forespørsles, og deretter brukes den alltid.
Hvordan bruker du disse tre livssyklusene? Vi kan bruke forskjellige metoder direkte når vi injiserer, koden er som følger:
La oss teste den spesifikke genereringen av disse tre livssyklusene
Vi skriver tre grensesnitt med forskjellige navn og tre forskjellige klasser for å implementere grensesnittene, som følger:
I hver implementasjonsklasses konstruktør genererer vi en ny GUID, som lar oss avgjøre om klassen har kjørt konstruktøren på nytt.
Injiser tjenester inn i kontrolleren
Det finnes vanligvis tre måter å injeksjonere på: konstruktørinjeksjon, metodeinjeksjon og attributtinjeksjon. Microsofts egen IOC-container bruker konstruktørinjeksjon som standard (Attributtinjeksjon støttes ikke, men det kan oppnås med en tredjeparts container-erstatning)
Vis sidekode:
Kjør prosjektet og få tilgang til det gjennom to forskjellige nettlesere, som vist nedenfor:
Vi fant at GUID-ene som genereres to ganger i den øyeblikkelige livssyklusen er inkonsistente, noe som indikerer at objektet ikke er det samme.
Imidlertid er omfangslivssyklusen den samme, fordi under samme omfang er GUID-en til tjenesten som brukes to ganger i samme nettleser den samme, noe som indikerer at samme objekt brukes.
I tilfellet med en singleton får to forskjellige nettlesere tilgang til den samme GUID-en, noe som indikerer at det samme objektet kalles.
(Slutt)
|