|
|
Opublikowano 14.09.2018 13:22:21
|
|
|
|

Zakres instancji decyduje, jak usługi są współdzielone między żądaniami.
Oryginalny adres:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Jedna instancja na każdą zależność
Dzięki tej opcji za każdym razem, gdy usługa jest żądana, zwracana jest nowa instancja. Użyj InstancePerDependency(). To jest opcja domyślna. Kod poniżej, linie 2 i 3, są równoważne.
Poniższy kod generuje nową instancję dla każdej pętli, co daje łącznie 100 instancji.
Pojedynczy przypadek
Użyj tej opcji, aby zażądać usługi zarówno w skali root, jak i zagnieżdżonej, oba zwracając tę samą instancję. Użyj SingleInstance() do określenia.
Kod poniżej, w1 i w2, to zawsze ten sam obiekt, a klasa Worker występuje tylko w jednym przypadku w 100 pętliach.
Jeden przypadek na zakres cyklu życia
Użyj tej opcji, aby zażądać usługi w określonym ILifetimeScope, zwracając tylko jedną instancję. Użyj InstancePerLifetimeScope(). W następującym kodzie 100 razy w1 w scope1 to ten sam obiekt, a 100 razy w2 w scope2 to ten sam obiekt, ale w1 i w2 nie są tym samym obiektem.
Jedna instancja na dopasowany zakres cyklu życia
Podobnie jak [jeden przypadek na cykl życia] powyżej, ale z większą kontrolą. Użyj tej opcji, aby umożliwić obiektowi ILifetimeScope otrzymanie tagu. W zasięgu walki tag team występuje tylko jeden przypadek. Użyj metody InstancePerMatchingLifetimeScope().
W poniższym kodzie w1 i w2 są takie same, w3 i w4 są takie same, ale w1 i w3 są różne.
Podczas parsowania należy podać odpowiednie znaczenie, a następujący kod wyrzuca wyjątek.
Jedna instancja na każde żądanie
Niektóre aplikacje naturalnie mają semantykę żądań, jak ASP.NET MVC lub WebForm. [Jedna instancja na żądanie] jest implementowana na podstawie [jedna instancja na dopasowany zakres cyklu życia], poprzez dostarczanie znaczników zakresu, funkcji rejestracji oraz integracji typów wspólnych. W zasadzie [jedna instancja na zakres cyklu życia dopasowania].
ASP.NET Core używa jednej instancji na zakres cyklu życia zamiast jednej instancji na każde żądanie.
Jedna instancja na posiadanie
<T> Typ współukrytego skojarzenia Owned tworzy zagnieżdżone zakresy cyklu życia. Dzięki rejestracji instancji na własność możesz ograniczyć zależności do własnych instancji.
W takim przypadku usługa ServiceForHandler jest ograniczona do zakresu instancji MessageHandler.
Zakres gwintów
Autofac może wymusić obiekty wątku A, aby nie spełniały zależności wątku B.
Pozwól każdemu stworzyć własny zakres życia
Ważne: W scenariuszu wielowątkowym uważaj, aby nie posprzątać zakresu nadrzędnego.W przeciwnym razie podzakresy w wątku pochodnym nie będą w stanie rozwiązywać usługi.
Każdy wątek będzie miał własną instancję MyThreadScopedComponent, która jest w zasadzie singletonem opartym na cyklu życia. Instancje w zakresie nie są udostępniane zewnętrznie, więc łatwo jest izolować komponenty między wątkami.
Dodając parametr ILifetimeScope, zakres nadrzędny może zostać wstrzyknięty do kodu generującego wątek, a Autofac automatycznie wstrzykuje aktualny zakres, który następnie może być użyty do tworzenia zagnieżdżonych zakresów.
Jeśli chcesz to kontrolować dalej, możesz użyć [jedna instancja na dopasowany zakres cyklu życia] do powiązania komponentów z zakresem wątków z wewnętrznymi zakresami cyklu życia, jak pokazano na rysunku:
"Kontekst" na diagramie to zakres cyklu życia utworzony metodą BeginLifetimeScope.
|
Poprzedni:Efekty kliknięcia myszką na front-end: wolność, demokracja, dobrobytNastępny:{"error_msg": "Certyfikacja IAM nie powiodła"}
|