V novém ASP.NET Core se k psaní kódu používá velké množství závislostních injekcí.
Například v našem kurzu Startup můžeme vidět následující:
AddMvc AddDbContext zahrnuje AddDirectoryBrowser, který jsme používali pro prohlídky adresářů předtím:
Všechny jsou to rámce, které poskytují kvalitní služby, a můžeme je přímo využívat jejich injekcí.
Inverze řízení (IoC) je návrhový princip v objektově orientovaném programování, který lze použít ke snížení vazby mezi počítačovým kódem. Nejčastější metodou je Dependency Injection (DI) a existuje také metoda nazvaná "Dependency Lookup". Řízením inverze při vytvoření objektu předává externí entita, která řídí všechny objekty v systému, odkaz na objekt, na kterém závisí. Lze také říci, že do objektu jsou vkládány závislosti. Pro použití IOC musí třída Startup odkazovat na Microsoft.Extensions.DependencyInjection(ps), což je už poměrně jednoduché: Microsoft... Expandovat... Závislostní injekce - - ,)
Injektujte životní cyklus služby
Microsoft poskytuje 3 životní cykly pro služby samoinjektované do sítě.
Přechodný
Okamžitá služba životního cyklu, která se vytváří pokaždé, když je požádána. Tento životní cyklus je nejvhodnější pro lehké, bezstátní služby.
Scoped
Ve stejném rozsahu je služba vytvořena pouze jednou na požadavek.
Singleton (pouze)
Globální se vytvoří pouze jednou, poprvé při žádosti, a pak se vždy použije.
Jak využíváte tyto tři životní cykly? Při injekci můžeme použít různé metody přímo, kód je následující:
Pojďme otestovat konkrétní generaci těchto tří životních cyklů
Píšeme tři rozhraní s různými názvy a 3 různými třídami pro implementaci rozhraní, a to následovně:
V konstruktoru každé implementační třídy generujeme nový GUID, který nám umožňuje určit, zda třída konstruktor znovu vykonala.
Injektování služeb do řadiče
Obecně existují tři způsoby injekce: injekce konstruktoru, metoda injekce a injekce atributů. Microsoftův vlastní IOC kontejner používá ve výchozím nastavení injekci konstruktorů (Injekce atributů není podporována, ale lze toho dosáhnout náhradou kontejneru třetí stranou)
Zobrazit kód stránky:
Spusť projekt a přistupuj k němu přes dva různé prohlížeče, jak je vidět níže:
Zjistili jsme, že GUIDy generované dvakrát během okamžitého životního cyklu jsou nekonzistentní, což naznačuje, že objekt není stejný.
Životní cyklus rozsahu je však stejný, protože ve stejném rozsahu je GUID služby použité dvakrát ve stejném prohlížeči stejný, což znamená, že je použit stejný objekt.
V případě singletonu přistupují dva různé prohlížeče vždy ke stejnému GUID, což znamená, že je volán stejný objekt.
(Konec)
|