V novom ASP.NET Core sa na písanie kódu používa veľké množstvo závislostných injekcií.
Napríklad v našom kurze Startup môžeme vidieť nasledovné:
AddMvc AddDbContext obsahuje AddDirectoryBrowser, ktorý sme používali na prehliadky adresárov predtým:
Všetky sú to rámce, ktoré poskytujú dobré služby a môžeme ich priamo využiť ich injekčným vkladaním.
Inverzia riadenia (IoC) je návrhový princíp v objektovo orientovanom programovaní, ktorý možno použiť na zníženie prepojenia medzi počítačovým kódom. Najbežnejšou metódou je Dependency Injection (DI) a existuje aj metóda nazývaná "Dependency Lookup". Riadením inverzie, keď je objekt vytvorený, externá entita, ktorá riadi všetky objekty v systéme, mu odovzdá odkaz na objekt, na ktorom závisí. Dá sa tiež povedať, že do objektu sú vložené závislosti. Na použitie IOC musí trieda Startup odkazovať na Microsoft.Extensions.DependencyInjection (ps), čo je už dosť jednoduché: Microsoft.. Rozšír... Závislostná injekcia - - ,)
Injektujte životný cyklus služby
Microsoft poskytuje 3 životné cykly pre samoinjekčné služby.
Prechodný
Okamžitá služba životného cyklu, ktorá sa vytvára zakaždým, keď je požadovaná. Tento životný cyklus je najvhodnejší pre ľahké, bezštátne služby.
Scoped
V rovnakom rozsahu sa služba vytvára iba raz na požiadavku.
Singleton (len)
Globálny sa vytvorí len raz, prvýkrát, keď je požiadaný, a potom sa vždy použije.
Ako využívate tieto tri životné cykly? Pri injekcii môžeme priamo použiť rôzne metódy, kód je nasledovný:
Otestujme konkrétnu generáciu týchto troch životných cyklov
Napíšeme tri rozhrania s rôznymi názvami a 3 rôzne triedy na implementáciu rozhraní, nasledovne:
V konštruktore každej implementačnej triedy generujeme nový GUID, ktorý nám umožňuje zistiť, či trieda konštruktor znovu vykonala.
Injektovať služby do kontroléra
Vo všeobecnosti existujú tri spôsoby injekcie: konštruktorová injekcia, metóda injekcia a injekcia atribútov. Microsoftov vlastný IOC kontajner štandardne používa injekciu konštruktorov (Injektácia atribútov nie je podporovaná, ale dá sa to dosiahnuť náhradou kontajnera treťou stranou)
Zobraziť kód stránky:
Spustite projekt a pristupujte k nemu cez 2 rôzne prehliadače, ako je uvedené nižšie:
Zistili sme, že GUID generované dvakrát v okamžitom životnom cykle sú nekonzistentné, čo naznačuje, že objekt nie je rovnaký.
Životný cyklus rozsahu je však rovnaký, pretože v rovnakom rozsahu je GUID služby použitej dvakrát v tom istom prehliadači rovnaký, čo naznačuje, že sa používa ten istý objekt.
V prípade singletonu dva rôzne prehliadače vždy pristupujú k rovnakému GUID, čo znamená, že volá sa ten istý objekt.
(Koniec)
|