|
|
Publisert på 14.09.2018 13:22:21
|
|
|
|

Instansens omfang bestemmer hvordan tjenester deles mellom forespørsler.
Opprinnelig adresse:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Én instans per avhengighet
Med dette alternativet returneres en ny instans hver gang tjenesten forespørsles. Bruk InstancePerDependency(). Dette er standardalternativet. Koden nedenfor, linje 2 og 3, er ekvivalente.
Følgende kode genererer en ny instans for hver løkke, totalt 100 instanser.
Enkeltinstans
Bruk dette alternativet for å be om en tjeneste enten i roten eller det nestede omfanget, begge returnerer samme instans. Bruk SingleInstance() for å spesifisere.
Koden nedenfor, w1 og w2, er alltid det samme objektet, og det finnes bare én instans av Worker-klassen i 100 løkker.
Én instans per livssyklusomfang
Bruk dette alternativet for å be om en tjeneste i en spesifikk ILifetimeScope, og returnere kun én instans. Bruk InstancePerLifetimeScope(). I følgende kode er de 100 ganger w1 i scope1 det samme objektet, og de 100 ganger w2 i scope2 er det samme objektet, men w1 og w2 er ikke det samme objektet.
Én instans per matchende livssyklusområde
Ligner på [én instans per livssyklusomfang] over, men med mer kontroll. Bruk dette alternativet for å tillate at ILifetimeScope-objektet får en Tag. Det finnes bare én instans innenfor området til tag match. Bruk InstancePerMatchingLifetimeScope()-metoden.
I koden nedenfor er w1 og w2 det samme, w3 og w4 er det samme, men w1 og w3 er forskjellige.
Riktig markering må oppgis ved parsing, og følgende kode gir et unntak.
Én instans per forespørsel
Noen applikasjoner har naturlig Request-semantikk, som ASP.NET MVC- eller WebForm-applikasjoner. [Én instans per forespørsel] implementeres på grunnlag av [én instans per matchende livssyklusområde], ved å tilby scope-markører, registreringsfunksjoner og felles typeintegrasjon. I hovedsak [én instans per matchende livssyklusområde].
ASP.NET Core bruker én instans per livssyklusomfang i stedet for én instans per forespørsel.
Én instans per eid
Typen Owned<T> implisitt assosiasjon skaper nestede livssyklusområder. Med registrering per instans kan du begrense avhengigheter til eide instanser.
I dette tilfellet er ServiceForHandler-tjenesten begrenset til omfanget til MessageHandler-instansen.
Gjengeområde
Autofac kan tvinge objektene i tråd A til ikke å tilfredsstille avhengighetene til tråd B.
La så hver enkelt lage sitt eget livstidsperspektiv
Viktig: I et multitrådet scenario, vær forsiktig så du ikke rydder opp i foreldrescopet.Ellers vil ikke subscopene i den avledede tråden kunne løse tjenesten.
Hver tråd vil ha sin egen instans av MyThreadScopedComponent, som i praksis er en livssyklus-scoped singleton. Instanser i scope er ikke gitt eksternt, så det er lett å holde komponenter isolert mellom tråder.
Ved å legge til parameteren ILifetimeScope kan foreldreområdet injiseres i koden som genererer tråden, og Autofac vil automatisk injisere det nåværende området, som deretter kan brukes til å lage nestede scopes.
Hvis du vil kontrollere det ytterligere, kan du bruke [én instans per matchende livssyklusområde] for å knytte trådbaserte komponenter til interne livssyklusomfang, som vist i figuren:
"Konteksten" i diagrammet er livssyklusområdet som er laget av BeginLifetimeScope-metoden.
|
Foregående:Front-end museklikkeffekter: frihet, demokrati, velstandNeste:{"error_msg": "IAM-sertifisering mislyktes"}
|