|
|
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, prosperitateUrmător:{"error_msg": "Certificarea IAM a eșuat"}
|