Uudessa ASP.NET Coressa koodin kirjoittamiseen käytetään suuri määrä riippuvuusinjektioita.
Esimerkiksi Startup-luokassamme näemme seuraavaa:
AddMvc AddDbContext sisältää AddDirectoryBrowserin, jota käytimme aiemmin hakemistokierroksilla:
Ne ovat kaikki kehyksiä, jotka tarjoavat hyviä palveluita, ja voimme käyttää niitä suoraan lisäämällä niitä.
Ohjauksen inversiointi (IoC) on olio-ohjelmoinnin suunnitteluperiaate, jota voidaan käyttää vähentämään tietokonekoodin kytkentää. Yleisin menetelmä on nimeltään Dependency Injection (DI), ja on olemassa myös menetelmä nimeltä "Dependency Lookup". Kääntämisen ohjaamisella, kun objekti luodaan, ulkoinen olento, joka ohjaa kaikkia järjestelmän olioita, välittää sille viittauksen siihen objektiin, johon se on riippuvainen. Voidaan myös sanoa, että riippuvuuksia injektoidaan objektiin. IOC:n käyttämiseksi Startup-luokan täytyy viitata Microsoft.Extensions.DependencyInjection(ps), joka on jo melko suoraviivaista: Microsoft.. Laajenna... Riippuvuuden injektio - - ,)
Injektoi palvelun elinkaari
Microsoft tarjoaa itse injektoiduille palveluille kolme elinkaaria.
Ohimenevä
Välitön elinkaaren palvelu, joka luodaan aina, kun sitä pyydetään. Tämä elinkaari sopii parhaiten kevyisiin, kansalaisuudettomiin palveluihin.
Scoped
Samassa laajuudessa palvelu luodaan vain kerran per pyyntö.
Singleton (vain)
Globaali luodaan vain kerran, ensimmäisellä pyynnöllä, ja sitten sitä käytetään aina.
Miten käytät näitä kolmea elinkaarta? Voimme käyttää eri menetelmiä suoraan injektoinnissa, koodi on seuraava:
Testataan näiden kolmen elinkaaren tarkkaa sukupolvea
Kirjoitamme kolme rajapintaa eri nimillä ja kolmella eri luokalla rajapintojen toteuttamiseksi seuraavasti:
Jokaisen toteutusluokan konstruktorissa generoimme uuden GUID:n, jonka avulla voimme määrittää, onko luokka suorittanut konstruktorin uudelleen.
Injektoi palvelut ohjaimeen
Injektiota on yleensä kolme tapaa: konstruktoriinjektio, menetelmäinjektio ja attribuutti-injektio. Microsoftin oma IOC-kontti käyttää oletuksena konstruktorien injektiota (Attribuuttien injektiointia ei tueta, mutta se onnistuu kolmannen osapuolen säiliön korvaamisella)
Katso sivun koodi:
Suorita projekti ja käytä sitä kahden eri selaimen kautta, kuten alla on esitetty:
Havaitsimme, että kahdesti välittömän elinkaaren aikana tuotetut GUID:t ovat ristiriitaisia, mikä viittaa siihen, että kohde ei ole sama.
Scope-elinkaari on kuitenkin sama, koska saman laajuuden alla palvelun käyttöliittymä, jota käytetään kahdesti samassa selaimessa, on sama, mikä osoittaa, että samaa objektia käytetään.
Singletonin tapauksessa kaksi eri selainta käyttää aina samaa käyttöliittymää, mikä osoittaa, että samaa objektia kutsutaan.
(Loppu)
|