W nowym ASP.NET Core do pisania kodu używa się dużej liczby wstrzyknięć zależności.
Na przykład na naszych zajęciach o startupach możemy zobaczyć następujące rzeczy:
AddMvc AddDbContext zawiera AddDirectoryBrowser, którego używaliśmy do zwiedzania katalogów wcześniej:
To wszystkie ramy, które oferują dobre usługi i możemy z nich korzystać bezpośrednio, wprowadzając je.
Odwrócenie sterowania (IoC) to zasada projektowania w programowaniu obiektowym, która może być użyta do ograniczenia sprzężenia między kodem komputerowym. Najczęściej spotykaną metodą jest wstrzykiwanie zależności (DI), a istnieje także metoda "Dependency Lookup". Kontrolując inwersję, gdy obiekt jest tworzony, zewnętrzny podmiot kontrolujący wszystkie obiekty w systemie przekazuje mu referencję do obiektu, od którego zależy. Można też powiedzieć, że do obiektu wprowadzane są zależności. Aby użyć IOC, klasa Startup musi odwołać się do Microsoft.Extensions.DependencyInjection(ps), co jest już dość proste: Microsoft... Rozwiń... Zastrzyk zależności - - ,)
Wstrzyknięcie cyklu życia usługi
Microsoft udostępnia 3 cykle życia dla usług samowstrzykowych.
Przejściowe
Natychmiastowa usługa cyklu życia, tworzona za każdym razem, gdy jest o nią zamawiana. Ten cykl życia najlepiej nadaje się do lekkich, bezstanowych usług.
Scoped
W tym samym zakresie usługa jest tworzona tylko raz na każde żądanie.
Singleton (tylko)
Globalny jest tworzony tylko raz, za pierwszym razem, gdy jest żądany, i wtedy jest zawsze używany.
Jak wykorzystujesz te trzy cykle życia? Możemy stosować różne metody bezpośrednio podczas wstrzykiwania, kod wygląda następująco:
Przetestujmy konkretne generowanie tych trzech cykli życia
Piszemy trzy interfejsy o różnych nazwach i 3 różne klasy, aby je zaimplementować, w następujący sposób:
W konstruktorze każdej klasy implementacyjnej generujemy nowy GUID, który pozwala nam określić, czy klasa ponownie wykonała konstruktor.
Wstrzyknięcie usług do kontrolera
Zazwyczaj istnieją trzy sposoby wstrzykiwania: injectacja konstruktorowa, metoda iniekcji oraz iniekcja atrybutów. Własny kontener IOC Microsoftu domyślnie używa wstrzyknięcia konstruktorów (Wstrzykiwanie atrybutów nie jest obsługiwane, ale można to osiągnąć za pomocą zewnętrznego zastępstwa kontenera)
Zobacz kod strony:
Uruchom projekt i uzyskaj dostęp do niego przez 2 różne przeglądarki, jak pokazano poniżej:
Stwierdziliśmy, że GUIDy generowane dwukrotnie w bieżącym cyklu życia są niespójne, co wskazuje, że obiekt nie jest taki sam.
Jednak cykl życia zakresu jest taki sam, ponieważ w tym samym zakresie GUID usługi użytej dwukrotnie w tej samej przeglądarce jest taki sam, co wskazuje, że użyty jest ten sam obiekt.
W przypadku singletona dwie różne przeglądarki zawsze mają dostęp do tego samego GUID, co oznacza, że wywoływany jest ten sam obiekt.
(Koniec)
|