I den nye ASP.NET Core bruges et stort antal afhængighedsinjektioner til at skrive kode.
For eksempel kan vi i vores Startup-klasse se følgende:
AddMvc AddDbContext inkluderer AddDirectoryBrowseren, som vi brugte til katalogrundvisninger før:
De er alle frameworks, der leverer gode tjenester, og vi kan bruge dem direkte ved at indsætte dem.
Inversion af kontrol (IoC) er et designprincip i objektorienteret programmering, som kan bruges til at reducere koblingen mellem computerkode. Den mest almindelige metode kaldes Dependency Injection (DI), og der findes også en metode kaldet "Dependency Lookup". Ved at kontrollere inversionen, når et objekt oprettes, sender en ekstern enhed, der styrer alle objekter i systemet, til det en reference til det objekt, det afhænger af. Det kan også siges, at afhængigheder injiceres i objektet. For at bruge ioc skal Startup-klassen referere til Microsoft.Extensions.DependencyInjection(ps, hvilket allerede er ret ligetil: Microsoft.. Udvid... Afhængighedsinjektion - - ,)
Injicere en tjenestes livscyklus
Microsoft tilbyder 3 livscyklusser for selvinjicerede tjenester.
Forbigående
En øjeblikkelig livscyklusservice, der oprettes hver gang den anmodes. Denne livscyklus egner sig bedst til lette, stateless services.
Scoped
I samme omfang oprettes tjenesten kun én gang pr. anmodning.
Singleton (Kun)
Den globale oprettelse oprettes kun én gang, første gang den anmodes, og derefter bruges den altid.
Hvordan bruger du disse tre livscyklusser? Vi kan bruge forskellige metoder direkte ved injektion, koden er som følger:
Lad os teste den specifikke generering af disse tre livscyklusser
Vi skriver tre grænseflader med forskellige navne og 3 forskellige klasser for at implementere grænsefladerne, som følger:
I hver implementeringsklasses konstruktør genererer vi en ny GUID, som gør det muligt at afgøre, om klassen har genudført konstruktøren.
Indsæt services i controlleren
Der er generelt tre måder at indsprøjte på: konstruktørinjektion, metodeinjektion og attributinjektion. Microsofts egen IOC-container bruger som standard konstruktørinjektion (Attributinjektion understøttes ikke, men det kan opnås med en tredjeparts containerudskiftning)
Se sidekode:
Kør projektet og få adgang til det gennem to forskellige browsere, som vist nedenfor:
Vi fandt, at de GUIDs, der genereres to gange i den øjeblikkelige livscyklus, er inkonsistente, hvilket indikerer, at objektet ikke er det samme.
Dog er scope-livscyklussen den samme, fordi GUID for tjenesten, der bruges to gange i samme browser, er den samme, hvilket indikerer, at det samme objekt bruges.
I tilfælde af en singleton tilgår to forskellige browsere altid den samme GUID, hvilket indikerer, at det samme objekt kaldes.
(Slut)
|