Podpora za vbrizgavanje odvisnosti je vgrajena v ASP.Net Core, Microsoftov odprtokodni, večplastni, vitki in modularni okvir za izdelavo visoko zmogljivih, razširljivih spletnih aplikacij. V ASP.Net Core lahko v svoje razrede vstavite tako okvirne kot aplikacijske storitve, namesto da bi bile tesno povezane. V tem članku bomo preučili, kako lahko delujemo z vbrizganjem odvisnosti v ASP.Net Core.
Vbrizganje odvisnosti (znano tudi kot DI) je vzorec načrtovanja, pri katerem se razredu ali predmetu vbrizgajo odvisni razredi (ki mu jih posreduje drug razred ali predmet), namesto da bi jih ustvarili neposredno. Vbrizgavanje odvisnosti olajša spenjanje in spodbuja preverljivost in vzdrževanje. Poleg tega vam vbrizgavanje odvisnosti omogoča spreminjanje izvedb, ne da bi morali spreminjati razrede ali vmesnike, ki te izvedbe izkoriščajo.
Dajanje storitve na voljo z vbrizganjem odvisnosti v ASP.Net
Zdaj bomo v programu Visual Studio z uporabo ASP.Net Core zgradili preprosto storitev in ponazorili, kako jo lahko dodamo v vsebnik za vbrizgavanje odvisnosti, jo registriramo v cevovodu in nato uporabimo v naši aplikaciji. Sledite tem korakom za ustvarjanje novega projekta ASP.Net Core v Visual Studio 2017 ali Visual Studio 2015. Če uporabljate Visual Studio 2015, preverite, ali je nameščen .Net Core.
- Odprite Visual Studio
- Kliknite Datoteka -> Novo -> Projekt
- V pogovornem oknu New Project izberite predlogo projekta »ASP.NET Core Web Application«
- Določite ime in lokacijo za svoj projekt in kliknite V redu, da shranite
Zdaj ustvarite naslednji razred POCO (navadni stari objekt CLI). Ta razred vsebuje samo eno lastnost - predstavlja vsa tematska področja, ki jih pokrivajo avtorji določenega založniškega podjetja.
javni razred TopicArea{
javni niz Ime {get; set; }
}
Razmislite o naslednjem imenovanem vmesniku ITopicAreaService
ki predstavlja pogodbo za TopicAreaService
.
javni vmesnik ITopicAreaService{
IEnumerable GetAllTopicAreas ();
}
The ITopicAreaService
vmesnik vsebuje izjavo ene imenovane metode GetAllTopicAreas ()
. The TopicAreaService
razred izvaja ITopicAreaService
kot je prikazano spodaj.
javni razred TopicAreaService: ITopicAreaService{
javni IEnumerable GetAllTopicAreas ()
{
vrni nov seznam
{
novo TopicArea {Ime},
novo TopicArea {Ime},
novo TopicArea {Ime}
};
}
}
Registracija storitev za vbrizgavanje odvisnosti v ASP.Net
Naslednji korak je registracija TopicAreaService
z vsebnikom za vbrizgavanje odvisnosti, ki je na voljo kot del kode ASP.Net. Če želite to narediti, v kodo napišite naslednji del kode ConfigureServices
v datoteki Startup.cs. The ConfigureServices
metoda doda storitve v vsebnik storitev, zaradi česar so na voljo v vaši aplikaciji z vbrizganjem odvisnosti. Izvede ga samodejno izvajalno okolje.
public void ConfigureServices (storitve IServiceCollection){
services.AddTransient ();
// Dodaj okvirne storitve.
services.AddMvc ();
}
Če imate več storitev, ki jih je treba registrirati, lahko uporabite razširitveni način, kot je prikazano spodaj.
javni statični razred ServiceExtensions{
javne statične IServiceCollection RegisterServices (
te storitve IServiceCollection)
{
services.AddTransient ();
// Tukaj dodajte vse druge storitve.
storitve vračanja;
}
}
Uporabljati RegisterServices
metoda vam omogoča, da obdržite svoj ConfigureServices
metoda vitka in vzdržna. Namesto da bi v storitvi ConfigureServices
, vse kar morate storiti je, da pokličete RegisterServices
podaljšek enkrat v vašem ConfigureServices
metoda, kot je prikazano v spodnjem delčku kode.
public void ConfigureServices (storitve IServiceCollection){
services.RegisterServices ();
// Dodaj okvirne storitve.
services.AddMvc ();
}
Življenjske dobe vbrizgavanja odvisnosti v ASP.Net
Življenjska doba vbrizgavanja odvisnosti se uporablja za določanje, kdaj se ustvarijo in znova ustvarijo odvisni predmeti. Kar zadeva življenjske dobe primerkov vbrizgavanja odvisnosti v aplikacijah ASP.Net Core, obstajajo tri možnosti:
- Singleton: To pomeni, da bodo vsi potrošniki ustvarili in delili samo en primerek.
- Obseg: To pomeni, da bo ustvarjen en primerek na obseg (tj. En primerek na zahtevo za aplikacijo).
- Prehodno: To pomeni, da komponente ne bodo v skupni rabi, ampak bodo ustvarjene vsakič, ko bodo zahtevane.
Upoštevajte, da smo v tem primeru uporabili Prehodno
tip. Naslednji delček kode prikazuje, kako lahko pri registraciji storitve uporabljate druge vrste življenjske dobe.
services.AddScoped ();services.AddSingleton ();
Uporaba storitve prek vbrizgavanja odvisnosti v ASP.Net
Zdaj, ko smo storitev, ki smo jo uvedli, dodali v cevovod, jo lahko uporabite v katerem koli krmilniku v vašem projektu ASP.Net Core. Naslednji delček kode prikazuje, kako lahko zahtevate primerek datoteke TopicAreaService
v krmilniku.
zasebno samo za branje ITopicAreaService _topicAreaService;javni DefaultController (ITopicAreaService topicAreaService)
{
_topicAreaService = topicAreaService;
}
Evo, kako GetAllTopicAreas
metoda TopicAreaService
se pokliče iz metode delovanja vašega krmilnika.
[HttpGet]javni IEnumerable GetAllTopicAreas ()
{
return _topicAreaService.GetAllTopicAreas ();
}
Spodaj je celoten seznam kod razreda krmilnika za vašo referenco.
z uporabo Microsoft.AspNetCore.Mvc;z uporabo System.Collections.Generic;
imenski prostor ASPNETCoreDI.Controllers
{
[Izdeluje (»application / json«)]
[Pot (»api / privzeto«)]
javni razred DefaultController: krmilnik
{
zasebno samo za branje ITopicAreaService _topicAreaService;
javni DefaultController (ITopicAreaService topicAreaService)
{
_topicAreaService = topicAreaService;
}
[HttpGet]
javni IEnumerable GetAllTopicAreas ()
{
return _topicAreaService.GetAllTopicAreas ();
}
}
}
Vgrajeno podporo za vbrizgavanje odvisnosti v ASP.Net Core lahko izkoristite za izdelavo modularnih, vitkih in čistih aplikacij, enostavnih za vzdrževanje in preizkušanje. Vgrajeni ponudnik vbrizgavanja odvisnosti v ASP.Net Core ni tako bogat s funkcijami, kot sta vsebnika, kot sta StructureMap in Ninject, vendar je precej hiter in, kot smo videli, enostaven za konfiguracijo in uporabo.