I den nya ASP.NET Core används ett stort antal beroendeinjektioner för att skriva kod.
Till exempel kan vi i vår Startup-klass se följande:
AddMvc AddDbContext inkluderar AddDirectoryBrowser som vi använde för katalogrundturer tidigare:
De är alla ramverk som erbjuder bra tjänster, och vi kan använda dem direkt genom att injicera dem.
Inversion av styrning (IoC) är en designprincip inom objektorienterad programmering som kan användas för att minska kopplingen mellan datorkod. Den vanligaste metoden kallas Dependency Injection (DI), och det finns också en metod som heter "Dependency Lookup". Genom att kontrollera inversionen, när ett objekt skapas, skickar en extern enhet som styr alla objekt i systemet en referens till det objekt det är beroende av. Det kan också sägas att beroenden injiceras i objektet. För att använda ioc behöver Startup-klassen referera till Microsoft.Extensions.DependencyInjection(ps, vilket redan är ganska enkelt: Microsoft.. Expandera... Beroendeinjektion - - ,)
Injicera en tjänsts livscykel
Microsoft erbjuder tre livscykler för självinjicerade tjänster.
Övergående
En omedelbar livscykeltjänst som skapas varje gång den begärs. Denna livscykel är bäst lämpad för lätta, tillståndslösa tjänster.
Scoped
I samma omfattning skapas tjänsten endast en gång per förfrågan.
Singleton (Endast Singleton)
Den globala skapas bara en gång, första gången den begärs, och sedan används den alltid.
Hur använder du dessa tre livscykler? Vi kan använda olika metoder direkt vid injicering, koden är följande:
Låt oss testa den specifika genereringen av dessa tre livscykler
Vi skriver tre gränssnitt med olika namn och tre olika klasser för att implementera gränssnitten, enligt följande:
I varje implementationsklass konstruktör genererar vi en ny GUID, som gör att vi kan avgöra om klassen har kört konstruktorn igen.
Injicera tjänster i kontrollern
Det finns generellt tre sätt att injicera: konstruktörinjektion, metodinjektion och attributinjektion. Microsofts egen IOC-container använder konstruktörinjektion som standard (Attributinjektion stöds inte, men det kan uppnås med en tredjepartscontainerersättning)
Visa sidkod:
Kör projektet och kom åt det via två olika webbläsare, som visas nedan:
Vi fann att de GUID:er som genereras två gånger under den omedelbara livscykeln är inkonsekventa, vilket indikerar att objektet inte är detsamma.
Dock är omfattningens livscykel densamma, eftersom GUID för tjänsten som används två gånger i samma webbläsare är densamma under samma omfattning, vilket indikerar att samma objekt används.
I fallet med en singleton använder två olika webbläsare alltid samma GUID, vilket indikerar att samma objekt anropas.
(Slut)
|