Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 20252|Răspunde: 1

[Sursă] Domeniul instanței componentei autofac

[Copiază linkul]
Postat pe 14.09.2018 13:22:21 | | | |
Domeniul instanței determină modul în care serviciile sunt partajate între cereri.

Adresa originală:http://docs.autofac.org/en/latest/lifetime/instance-scope.html

O instanță per dependență

Cu această opțiune, o nouă instanță este returnată de fiecare dată când serviciul este solicitat. Folosește InstancePerDependency(). Aceasta este opțiunea implicită. Codul de mai jos, liniile 2 și 3, este echivalent.

Codul următor generează o nouă instanță pentru fiecare buclă, pentru un total de 100 de instanțe.

Instanță unică

Folosiți această opțiune pentru a solicita un serviciu fie în domeniul rădăcină, fie în cel imbricat, ambele returnând aceeași instanță. Folosește SingleInstance() pentru a specifica.


Codul de dedesubt, w1 și w2 sunt întotdeauna același obiect, iar există o singură instanță a clasei Worker în 100 de bucle.


O instanță pentru fiecare scop de ciclu de viață

Folosiți această opțiune pentru a solicita un serviciu într-un anumit ILifetimeScope, returnând o singură instanță. Folosește InstancePerLifetimeScope(). În codul următor, 100 de ori w1 în scope1 este același obiect, iar 100 de ori w2 în scope2 sunt același obiect, dar w1 și w2 nu sunt același obiect.


O instanță pentru fiecare interval de ciclu de viață de potrivire

Similar cu [o instanță pe scope de ciclu de viață] de mai sus, dar cu mai mult control. Folosește această opțiune pentru a permite ca obiectul ILifetimeScope să primească un Tag. Există o singură instanță în intervalul meciului pe echipe. Folosește metoda InstancePerMatchingLifetimeScope().

În codul de mai jos, w1 și w2 sunt aceleași, w3 și w4 sunt aceleași, dar w1 și w3 sunt diferite.

Trebuie furnizat marcajul corespunzător la parsing, iar codul următor aruncă o excepție.

O instanță per cerere

Unele aplicații au, în mod natural, o semantică de cerere, cum ar fi ASP.NET MVC sau aplicațiile WebForm. [O instanță pe cerere] este implementată pe baza [unei instanțe pe interval de ciclu de viață corespunzător], prin furnizarea de markeri de scop, funcții de înregistrare și integrare a tipurilor comune. Practic, [o instanță pentru fiecare interval de ciclu de viață de potrivire].

ASP.NET Core folosește o singură instanță pe scop de ciclu de viață în loc de o singură instanță pe cerere.

O instanță pentru fiecare deținut

<T> Tipul de asociere implicită Deținut creează intervale de ciclu de viață imbricate. Cu înregistrarea instanței pe proprietate, poți limita dependențele la instanțele deținute.

În acest caz, serviciul ServiceForHandler este limitat la sfera instanței MessageHandler.


Gama de filete

Autofac poate forța obiectele firului A să nu satisfacă dependențele firului B.

Apoi să lăsăm fiecare să-și creeze propriul domeniu de viață

Important: Într-un scenariu multithreaded, ai grijă să nu cureți scopul părinte.În caz contrar, subscopurile din firul derivat nu vor putea rezolva serviciul.

Fiecare fir de discuție va avea propria instanță de MyThreadScopedComponent, care este practic un singleton cu scop de ciclu de viață. Instanțele din domeniu nu sunt furnizate extern, așa că este ușor să păstrezi componentele izolate între fire.

Prin adăugarea parametrului ILifetimeScope, intervalul părinte poate fi injectat în codul care generează firul, iar Autofac va injecta automat intervalul curent, care poate fi folosit pentru a crea scopuri imbricate.

Dacă doriți să o controlați mai mult, puteți folosi [o instanță pentru fiecare interval de ciclu de viață potrivit] pentru a asocia componentele cu scop de fire cu domenii interne ale ciclului de viață, așa cum este arătat în figură:



"Contextul" din diagramă reprezintă intervalul de ciclu de viață creat de metoda BeginLifetimeScope.





Precedent:Efecte de click al mouse-ului în front-end: libertate, democrație, prosperitate
Următor:{&quot;error_msg&quot;: &quot;Certificarea IAM a eșuat&quot;}
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com