|
|
Zveřejněno 14.09.2018 13:22:21
|
|
|
|

Rozsah instance určuje, jak jsou služby sdíleny mezi požadavky.
Původní adresa:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Jedna instance na závislost
S touto možností je při každém požadavku na službu vrácena nová instance. Použijte InstancePerDependency(). To je výchozí volba. Kód níže, řádky 2 a 3, jsou ekvivalentní.
Následující kód generuje novou instanci pro každou smyčku, celkem tedy 100 instancí.
Jediný případ
Použijte tuto možnost pro požadavek na službu buď v kořenovém, nebo vnořeném rozsahu, přičemž obě vrátí stejnou instanci. Použijte SingleInstance() pro specifikaci.
Kód níže, w1 a w2, jsou vždy stejný objekt a existuje pouze jedna instance třídy Worker ve 100 smyčkách.
Jedna instance za celý životní cyklus
Použijte tuto možnost pro požadavek na službu v konkrétním ILifetimeScope, přičemž vraťte pouze jednu instanci. Použijte InstancePerLifetimeScope(). V následujícím kódu je 100 krát w1 v scope1 stejný objekt a 100krát w2 v scope2 je stejný objekt, ale w1 a w2 nejsou stejný objekt.
Jedna instance na odpovídající životní cyklus
Podobně jako [jedna instance za životní cyklus] výše, ale s větší kontrolou. Použijte tuto možnost, aby objekt ILifetimeScope dostal Tag. V dosahu tag team zápasu je pouze jeden případ. Použijte metodu InstancePerMatchingLifetimeScope().
V níže uvedeném kódu jsou w1 a w2 stejné, w3 a w4 stejné, ale w1 a w3 jsou odlišné.
Při parsování musí být uvedeno správné značení a následující kód vyhodí výjimku.
Jedna instance na požadavek
Některé aplikace přirozeně mají sémantiku požadavků, například ASP.NET MVC nebo WebForm. [Jedna instance na požadavek] je implementována na základě [jedna instance na odpovídající životní cyklus] poskytováním markerů rozsahu, registračních funkcí a integrace společného typu. V podstatě [jedna instance na odpovídající životní cyklus].
ASP.NET Core používá jednu instanci na rozsah životního cyklu místo jedné instance na požadavek.
Jedna instance na Owned
<T> Implicitní asociace Owned vytváří vnořené rozsahy životního cyklu. S registrací instancí na vlastněné instance můžete omezit závislosti na vlastněné instance.
V tomto případě je služba ServiceForHandler omezena na rozsah instance MessageHandler.
Rozsah závitů
Autofac může donutit objekty vlákna A, aby nesplňovaly závislosti vlákna B.
Pak ať si každý z nich vytvoří vlastní celoživotní rozsah
Důležité: V multithreaded scénáři buďte opatrní, abyste nečistili mateřský scope.Jinak podrozsahy v odvozeném vlákně nebudou schopny službu vyřešit.
Každé vlákno bude mít vlastní instanci MyThreadScopedComponent, což je v podstatě singleton zaměřený na životní cyklus. Instance v rozsahu nejsou poskytovány externě, takže je snadné udržet komponenty izolované mezi vlákny.
Přidáním parametru ILifetimeScope lze do kódu, který vlákno generuje, vstříknout mateřský rozsah a Autofac automaticky vloží aktuální rozsah, který pak lze použít k vytvoření vnořených rozsahů.
Pokud to chcete dále kontrolovat, můžete použít [jedna instance za odpovídající rozsah životního cyklu] k přiřazení komponent s vláknovým rozsahem k interním rozsahům životního cyklu, jak je znázorněno na obrázku:
"Kontext" v diagramu je rozsah životního cyklu vytvořený metodou BeginLifetimeScope.
|
Předchozí:Efekty kliknutí myší na přední části: svoboda, demokracie, prosperitaDalší:{"error_msg": "IAM certifikace neuspěla"}
|