|
|
Objavljeno na 14. 09. 2018 13:22:21
|
|
|
|

Obseg primera določa, kako se storitve delijo med zahtevami.
Izvirni naslov:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Ena instanca na odvisnost
S to možnostjo se vsakič, ko je storitev zahtevana, vrne nova instanca. Uporabite InstancePerDependency(). To je privzeta možnost. Spodnja koda, vrstici 2 in 3, sta enakovredni.
Naslednja koda ustvari novo instanco za vsako zanko, skupaj 100 primerkov.
En sam primer
Uporabite to možnost za zahtevo storitve bodisi v korenskem ali gnezdenem obsegu, pri čemer obe vrneta isto instanco. Za določitev uporabite SingleInstance().
Spodnja koda, w1 in w2, sta vedno isti objekt, in obstaja le ena instanca razreda Worker v 100 zankah.
En primer na življenjski cikel obsega
Uporabite to možnost za zahtevo storitve v določenem ILifetimeScope, pri čemer vrnete le eno instanco. Uporabite InstancePerLifetimeScope(). V naslednji kodi je 100 krat w1 v scope1 isti objekt, 100-krat w2 v scope2 pa isti objekt, vendar w1 in w2 nista isti objekt.
Ena instanca na vsak življenjski razpon ujemajoče se
Podobno kot [en primer na življenjski cikel] zgoraj, vendar z več nadzora. Uporabite to možnost, da omogočite, da se objektu ILifetimeScope dodeli oznaka. V dosegu ekipnega dvoboja je le en primer. Uporabite metodo InstancePerMatchingLifetimeScope().
V spodnji kodi sta w1 in w2 enaka, w3 in w4 sta enaka, vendar sta w1 in w3 razbita.
Ustrezna oznaka mora biti zagotovljena pri razčlenjevanju, naslednja koda pa vrže izjemo.
Ena instanca na zahtevo
Nekatere aplikacije imajo naravno semantiko zahtev, kot so ASP.NET MVC ali WebForm aplikacije. [Ena instanca na zahtevo] je implementirana na podlagi [ena instanca na ujemajoč se življenjski cikel], z zagotavljanjem označevalcev obsega, funkcij registracije in integracije skupnega tipa. V bistvu [ena instanca na ujemajoči se življenjski razpon].
ASP.NET Core uporablja eno instanco na obseg življenjskega cikla namesto ene instance na zahtevo.
Ena instanca na lastništvo
<T> Tip implicitne asociacije Owned ustvarja gnezdene življenjske cikle. Z registracijo primerkov na lastništvo lahko omejite odvisnosti na lastne primerke.
V tem primeru je storitev ServiceForHandler omejena na obseg instance MessageHandler.
Obseg navoja
Autofac lahko prisili objekte niti A, da ne izpolnjujejo odvisnosti niti B.
Potem naj vsak ustvari svoj življenjski okvir
Pomembno: V večnitnem primeru bodite previdni, da ne očistite nadrejenega obsega.V nasprotnem primeru podobsegi v izpeljani niti ne bodo mogli razrešiti storitve.
Vsaka nit bo imela svojo instanco MyThreadScopedComponent, ki je v bistvu enodimenzionalna enota z življenjskim ciklom. Primeri v obsegu niso na voljo zunaj, zato je enostavno izolirati komponente med nitmi.
Z dodajanjem parametra ILifetimeScope se lahko nadrejeni obseg vbrizga v kodo, ki generira nit, Autofac pa samodejno vnese trenutni razpon, ki se nato uporabi za ustvarjanje gnezdenih obsegov.
Če želite to še bolj nadzorovati, lahko uporabite [en primer na ujemajoči se življenjski razpon] za povezovanje komponent z obsegom niti z notranjimi obsegi življenjskega cikla, kot je prikazano na sliki:
"Kontekst" na diagramu je življenjski cikel razpona, ustvarjen z metodo BeginLifetimeScope.
|
Prejšnji:Efekti klikov miške na sprednji strani: svoboda, demokracija, blaginjaNaslednji:{"error_msg": "IAM certifikacija ni uspela"}
|