|
|
Publicerad på 2018-09-14 13:22:21
|
|
|
|

Instansens omfattning avgör hur tjänster delas mellan förfrågningar.
Ursprunglig adress:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
En instans per beroende
Med detta alternativ returneras en ny instans varje gång tjänsten begärs. Använd InstancePerDependency(). Detta är standardalternativet. Koden nedan, raderna 2 och 3, är ekvivalenta.
Följande kod genererar en ny instans för varje loop, totalt 100 instanser.
Enskilda instanser
Använd detta alternativ för att begära en tjänst i antingen root- eller nästlade scope, där båda returnerar samma instans. Använd SingleInstance() för att specificera.
Koden nedan, w1 och w2, är alltid samma objekt, och det finns bara en instans av Worker-klassen i 100 loopar.
En instans per livscykelomfång
Använd detta alternativ för att begära en tjänst i en specifik ILifetimeScope och returnera endast en instans. Använd InstancePerLifetimeScope(). I följande kod är de 100 gångerna w1 i scope1 samma objekt, och de 100 gånger w2 i scope2 är samma objekt, men w1 och w2 är inte samma objekt.
En instans per matchningslivscykelintervall
Liknande [en instans per livscykelomfång] ovan, men med mer kontroll. Använd detta alternativ för att tillåta att ILifetimeScope-objektet får en tagg. Det finns bara ett tillfälle inom intervallet för tag match. Använd InstancePerMatchingLifetimeScope()-metoden.
I koden nedan är w1 och w2 samma, w3 och w4 är samma, men w1 och w3 skiljer sig åt.
Lämplig markering måste anges vid parsing, och följande kod ger ett undantag.
En instans per förfrågan
Vissa applikationer har naturligtvis Request-semantik, såsom ASP.NET MVC- eller WebForm-applikationer. [En instans per förfrågan] implementeras baserat på [en instans per matchande livscykelintervall], genom att tillhandahålla scope-markörer, registreringsfunktioner och gemensam typintegration. I princip, [en instans per matchande livscykelintervall].
ASP.NET Core använder en instans per livscykelomfång istället för en instans per förfrågan.
En instans per ägd
Typen Owned<T> implicit association skapar nästlade livscykelintervall. Med registrering per instans kan du begränsa beroenden till ägda instanser.
I detta fall är ServiceForHandler-tjänsten begränsad till MessageHandler-instansens omfattning.
Gängomfång
Autofac kan tvinga objekten i tråd A att inte uppfylla tråd B:s beroenden.
Låt sedan var och en skapa sitt eget livstidsperspektiv
Viktigt: I ett multitrådat scenario, var försiktig så att du inte rensar upp i föräldrascopet.Annars kommer delscopes i den härledda tråden inte att kunna lösa tjänsten.
Varje tråd har sin egen instans av MyThreadScopedComponent, som i princip är en livscykelbaserad singleton. Instanser inom scope tillhandahålls inte externt, så det är lätt att hålla komponenter isolerade mellan trådar.
Genom att lägga till parametern ILifetimeScope kan föräldraintervallet injiceras i koden som genererar tråden, och Autofac injicerar automatiskt det aktuella intervallet, som sedan kan användas för att skapa nästlade scopes.
Om du vill kontrollera det vidare kan du använda [en instans per matchande livscykelintervall] för att associera tråd-scoped komponenter med interna livscykelscopes, som visas i figuren:
"Kontexten" i diagrammet är livscykelintervallet som skapas med BeginLifetimeScope-metoden.
|
Föregående:Front-end musklickseffekter: frihet, demokrati, välståndNästa:{"error_msg": "IAM-certifiering misslyckades"}
|