|
|
Zverejnené 14. 9. 2018 13:22:21
|
|
|
|

Rozsah inštancie určuje, ako sa služby zdieľajú medzi požiadavkami.
Pôvodná adresa:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Jedna inštancia na každú závislosť
Pri tejto možnosti sa pri každej požiadavke na službu vráti nová inštancia. Použite InstancePerDependency(). Toto je predvolená možnosť. Kód nižšie, riadky 2 a 3, sú ekvivalentné.
Nasledujúci kód generuje novú inštanciu pre každú slučku s celkovým počtom 100 inštancií.
Jediná inštancia
Použite túto možnosť na požiadanie o službu buď v koreňovom alebo vnorenom rozsahu, pričom obe vracajú tú istú inštanciu. Použite SingleInstance() na špecifikáciu.
Kód nižšie, w1 a w2, sú vždy ten istý objekt a existuje len jedna inštancia triedy Worker v 100 slučkách.
Jedna inštancia za každý životný cyklus rozsahu
Použite túto možnosť na požiadanie o službu v konkrétnom ILifetimeScope, pričom vracajte iba jednu inštanciu. Použite InstancePerLifetimeScope(). V nasledujúcom kóde je 100 krát w1 v scope1 ten istý objekt a 100 krát w2 v scope2 je ten istý objekt, ale w1 a w2 nie sú ten istý objekt.
Jedna inštancia za každý rozsah životného cyklu zhody
Podobne ako [jedna inštancia na životný cyklus] vyššie uvedené, ale s väčšou kontrolou. Použite túto možnosť, aby objekt ILifetimeScope dostal Tag. V dosahu tag team zápasu je len jeden prípad. Použite metódu InstancePerMatchingLifetimeScope().
V nižšie uvedenom kóde sú w1 a w2 rovnaké, w3 a w4 rovnaké, ale w1 a w3 sú odlišné.
Pri parsovaní musí byť poskytnuté príslušné značkovanie a nasledujúci kód vyhodí výnimku.
Jedna inštancia na požiadavku
Niektoré aplikácie prirodzene majú sémantiku požiadaviek, napríklad ASP.NET MVC alebo WebForm aplikácie. [Jedna inštancia na požiadavku] je implementovaná na základe [jedna inštancia na zodpovedajúci rozsah životného cyklu], poskytovaním markerov rozsahu, registračných funkcií a integrácie spoločného typu. V podstate [jedna inštancia na zodpovedajúci životný cyklus].
ASP.NET Core používa jednu inštanciu na rozsah životného cyklu namiesto jednej inštancie na požiadavku.
Jedna inštancia na Owned
<T> Vlastnený implicitný typ asociácie vytvára vnorené rozsahy životného cyklu. Pri registrácii inštancie na vlastnenie môžete obmedziť závislosti na vlastnené inštancie.
V tomto prípade je služba ServiceForHandler obmedzená na rozsah inštancie MessageHandler.
Rozsah závitov
Autofac môže prinútiť objekty vlákna A, aby nespĺňali závislosti vlákna B.
Potom nech si každý vytvorí svoj vlastný celoživotný rozsah
Dôležité: V multithreaded scenári dávajte pozor, aby ste nevyčistili rodičovský rozsah.Inak podrozsahy v odvodenom vlákne nebudú schopné službu vyriešiť.
Každé vlákno bude mať vlastnú inštanciu MyThreadScopedComponent, čo je v podstate singleton s cyklickým rozsahom. Inštancie v rozsahu nie sú poskytované externe, takže je jednoduché udržať komponenty izolované medzi vláknami.
Pridaním parametra ILifetimeScope môže byť rodičovský rozsah vložený do kódu, ktorý vlákno generuje, a Autofac automaticky vloží aktuálny rozsah, ktorý potom môže byť použitý na vytvorenie vnorených rozsahov.
Ak to chcete ďalej kontrolovať, môžete použiť [jedna inštancia za zodpovedajúci rozsah životného cyklu] na priradenie komponentov s vláknovým rozsahom k interným rozsahom životného cyklu, ako je znázornené na obrázku:
"Kontext" v diagrame je rozsah životného cyklu vytvorený metódou BeginLifetimeScope.
|
Predchádzajúci:Efekty kliknutia myšou na prednej strane: sloboda, demokracia, prosperitaBudúci:{"error_msg": "IAM certifikácia zlyhala"}
|