Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 24701|Svare: 1

[Kilde] Autofac kontrollerer omfang og levetid

[Kopier lenke]
Publisert 19.09.2020 12:51:52 | | | |
En god artikkel å lære om Autofacs kontrollomfang og livssyklus, livssyklusomfang tilsvarer en arbeidsenhet i applikasjonen din, en arbeidsenhet starter livssyklusomfanget fra starten, og deretter blir tjenestene som krever den arbeidsenheten analysert fra livssyklusomfanget.

Livstidssikter

Lag Lifetme-teleskoper

Lag et kikkertsikte manuelt og bruk Avfall. Livstidsteleskoper er engangsmodeller og de sporer avhending av komponenter, så sørg alltid for å kalle «Dispose()» eller pakke dem inn i «bruker»-setninger.




Labelens levetidsteleskoper

Noen ganger kan det hende du må dele noen tjenester innenfor en arbeidsenhet, men du vil ikke bruke globale delingsfasiliteter, som singleton-modus. For eksempel livssyklusen per forespørsel for en webapplikasjon, i så fall kan du bruke InstancePerMatchingLifetimeScope for å identifisere livssyklusen og tjenesten din.

For eksempel finnes det en komponent som sender e-post, og transaksjonslogikken må sende meldinger flere ganger, slik at e-posttjenesten kan deles i hver logisk transaksjonsskive. Hvis du ikke vil at e-postkomponenten skal være en global singleton, kan du sette den slik.



Legge til registreringer i et livstidsomfang

Autofac lar deg legge til "on the fly" når du lager en livssyklus. Dette kan hjelpe deg når du trenger å gjøre en slags «punktsveis»-overstyring med begrenset registrering, eller hvis du generelt bare trenger noe ekstra i et teleskop som du ikke vil registrere globalt. Dette gjør du ved å sende en lambda til BeginLifetimeScope() som tar en ContainerBuilder og legger til registreringer. (Når du oppretter en livssyklus, registrer flere tjenester uten global registrering)



Instansomfang

Instansens omfang bestemmer hvordan en instans deles mellom forespørsler. Når man ber om en tjeneste, kan autofac returnere et enkelt instansomfang, en ny instans per avhengighetsomfang, eller en enkeltperson i en kontekst, som en tråd eller en HTTP-forespørsel per livstidsomfang. Dette gjelder for instanser returnert fra et eksplisitt Resolve()-kall, samt instanser opprettet internt av beholderen for å tilfredsstille avhengighetene til en annen komponent.

  • Instans per avhengighet
  • Enkeltinstans
  • Instans per livstidsomfang
  • Instans per matchende livstidsomfang
  • Instans per forespørsel
  • Instans per eid
  • Trådomfang


Instans per avhengighet

Også kalt transient eller 'factory' i andre containere, returnerer den en unik instans hver gang en tjeneste forespørsles. Hvis det ikke er spesifisert noen livssyklus, er dette standardoppførselen.



Hver Resolve-avhengighet returnerer en ny komponent.



Enkeltinstans

Den samme instansen returneres på tvers av alle forespørsler og nestede scopes.




Instans per livstidsomfang

Dette omfanget kan anvendes på nestede omfang. Per-lifetime scope-komponenten har maksimalt én instans innenfor det nestede scope. Dette er nyttig for objekter spesifikke for en enkelt arbeidsenhet som kan trenge å legge inn flere logiske arbeidsenheter. Hver nestede livstidsscope vil få en ny instans av den registrerte avhengigheten.



Når du parser per livstids scope-instanskomponent, er det bare én instans i hvert nestede scope (f.eks. per arbeidsenhet).


Instans per matchende livstidsomfang

Dette ligner på Instance Per Lifetime Scope, men kontrollen kan deles med mer presise instanser. Når du lager en nestet livssyklus, kan du merke den eller gi den et navn. En komponent med per-matching-levetid-omfang vil ha maksimalt én instans per nestelt livstidsomfang som matcher et gitt navn。 Dette tillater opprettelse av scoped singletons, hvor nestede sykluser kan dele komponenter uten å opprette globale instanser.

Nyttig for enkeltstående arbeidsenheter, som http-forespørsler, opprettet som nestede livssykluser. Hvis en nestelt levetid opprettes per HTTP-forespørsel, vil enhver komponent med per-livstidsomfang ha en instans per HTTP-forespørsel. (Mer om levetidsomfanget per forespørsel nedenfor.)

I de fleste applikasjoner trengs det kun én hierarkisk container-nekring for å representere en arbeidsenhet. Hvis flere nestede nivåer kreves (f.eks. global->forespørsel->transaksjon), kan komponenter opprettes for å deles på et spesifikt nivå via tagger.



Når en nestet livssyklus startes, knyttes tagger til denne livssyklusen. Du får et unntak hvis du prøver å løse en per-matching-lifetime-scope-komponent når det ikke finnes noe korrekt navngitt livstidsscope. (Hvis livssyklusen til den ulagrede taggen blir analysert, vil et unntak oppstå.)



Instans per forespørsel

Noen applikasjonstyper har naturlig en «forespørsel»-type semantikk, som ASP.NET MVC. Blant disse søknadstypene er det nyttig å ha en form for «enkeltperson per forespørsel». Instans per forespørsel bygger videre på instans per matchende livstidsomfang ved å tilby en velkjent livstidsomfangstag, en registreringsmetode og integrasjon for felles applikasjoner typer (én instans per forespørsel bygges oppå levetiden per matching ved å tilby en velkjent livstidstag, en registreringsmetode og integrasjon for vanlige applikasjonstyper). I hovedsak er det per matchende levetid.

Dette betyr at hvis det ikke finnes noen nåværende forespørsel, og du parser en komponent registrert basert på instans per forespørsel, vil et unntak bli kastet. Det finnes en detaljert FAQ som forklarer hvordan man kan jobbe med levetider per forespørsel.

Innloggingen med hyperkoblingen er synlig.



Instans per eid

Eid implisitt relasjonstype, som skaper en ny nestet livssyklus. Avhengigheter kan begrenses til vertsinstansen ved å registrere seg hos instans-per-owned.



I dette eksempelet vil ServiceForHandler-tjenesten være begrenset til levetiden til den eide MessageHandler-instansen.



Trådomfang

Du kan se på det

Innloggingen med hyperkoblingen er synlig.

Faktisk kamp

Jeg bruker Instance Per Lifetime Scope-modus.

I winform, når kallet utføres, bruker det en databasekontekst hver gang, som vist i figuren nedenfor:



_dbContext.GetHashCode();
13583655
_dbContext.GetHashCode();
13583655
_dbContext.GetHashCode();
13583655

Når det gjelder multitråding og samtidighet, hvis du bruker samme databasekontekst, vil du støte på unntak når du legger til, sletter, endrer eller sjekker databasen.

Jeg vil at autofac skal returnere et nytt objekt hver gang jeg klikker på knappen, koden er som følger:


Som vist nedenfor:



(Slutt)




Foregående:.NET/C# Vannmerket tekst for flislegging av bilder
Neste:ASP.NET Forby tilgang til loggfiler i form av URL-er
Publisert 2022-9-8 09:58:24 |
Akkurat det vi trenger
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com