Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 24701|Atbildi: 1

[Avots] Autofac vadības apjoms un kalpošanas laiks

[Kopēt saiti]
Publicēts 2020-9-19 12:51:52 | | | |
Labs raksts, lai uzzinātu par Autofac vadības tvērumu un dzīves ciklu, dzīves cikla tvērums ir līdzvērtīgs darba vienībai jūsu lietojumprogrammā, darba vienība sāks dzīves cikla tvērumu sākumā, un pēc tam pakalpojumi, kuriem nepieciešama šī darba vienība, tiek parsēti no dzīves cikla tvēruma.

Mūža tvērumi

Izveidojiet Lifetme tvērumus

Izveidojiet tvērumu manuāli un Iznīcināšana. Mūža tvērumi ir vienreizlietojami, un tie izseko komponentu iznīcināšanu, tāpēc pārliecinieties, ka vienmēr zvanāt "Dispose()" vai iesaiņojiet tos "izmantojot" paziņojumos.




Etiķetes kalpošanas laiks

Dažreiz daži pakalpojumi var būt jākoplieto darba vienībā, bet nevēlaties izmantot globālās koplietošanas ērtības, piemēram, vientuļnieka režīmu. Piemēram, tīmekļa lietojumprogrammas dzīves cikls katram pieprasījumam, tādā gadījumā varat izmantot InstancePerMatchingLifetimeScope, lai identificētu savu dzīves ciklu un pakalpojumu.

Piemēram, ir komponents, kas sūta e-pastu, un transakcijas loģikai ir jāsūta ziņojumi vairākas reizes, lai pasta pakalpojumu varētu koplietot katrā loģiskās transakcijas sadaļā. Ja nevēlaties, lai e-pasta komponents būtu globāls singletons, varat to iestatīt šādi.



Reģistrāciju pievienošana mūža darbības jomai

Autofac ļauj pievienot "lidojumā", veidojot dzīves ciklu. Tas var jums palīdzēt, ja jums ir nepieciešams veikt sava veida "vietas metināšanas" ierobežotas reģistrācijas ignorēšanu vai ja jums parasti ir nepieciešamas papildu lietas tādā jomā, kuru nevēlaties reģistrēt visā pasaulē. To var izdarīt, nododot lambda uz BeginLifetimeScope(), kas aizņem ContainerBuilder un pievieno reģistrācijas. (Veidojot dzīves ciklu, reģistrējiet papildu pakalpojumus bez globālās reģistrācijas)



Instances tvērums

Instances tvērums nosaka, kā instance tiek koplietota starp pieprasījumiem. Pieprasot pakalpojumu, autofac var atgriezt vienu instances tvērumu, jaunu instanci katram atkarības tvērumam vai atsevišķu kontekstu, piemēram, pavedienu vai HTTP pieprasījumu par mūža tvērumu. Tas attiecas uz gadījumiem, kas atgriezti no skaidra Resolve() izsaukuma, kā arī uz instancēm, ko konteiners izveidojis iekšēji, lai apmierinātu cita komponenta atkarības.

  • Instance katrai atkarībai
  • Viena instance
  • Instance par mūža tvērumu
  • Instance katram atbilstošam kalpošanas ilgumam
  • Instance katram pieprasījumam
  • Instance katram piederošajam
  • Vītnes darbības joma


Instance katrai atkarībai

Citos konteineros to sauc arī par īslaicīgu vai "rūpnīcu", un tas atgriež unikālu gadījumu katru reizi, kad tiek pieprasīts pakalpojums. Ja nav norādīts dzīves cikls, tā ir noklusējuma darbība.



Katra atkarība Atrisināt atgriež jaunu komponentu.



Viena instance

Viena un tā pati instance tiek atgriezta visos pieprasījumos un ligzdotajos tvērumos.




Instance par mūža tvērumu

Šo tvērumu var lietot ligzdotajiem tvērumiem. Dzīves ilguma tvēruma komponentam ligzdotajā tvērumā ir ne vairāk kā viena instance. Tas ir noderīgi objektiem, kas raksturīgi vienai darba vienībai, kuriem, iespējams, būs nepieciešams ligzdot papildu loģiskās darba vienības. Katrs ligzdotais kalpošanas laiks iegūs jaunu reģistrētās atkarības instanci.



Analizējot mūža tvēruma instances komponentu, katrā ligzdotajā tvērumā ir tikai viena instance (piemēram, uz darba vienību).


Instance katram atbilstošam kalpošanas ilgumam

Tas ir līdzīgs Instance Per Lifetime Scope, bet vadību var koplietot ar precīzākām instancēm. Veidojot ligzdotu dzīves ciklu, varat tam piešķirt etiķeti vai nosaukumu. Komponentam ar atbilstības mūža tvērumu būs ne vairāk kā viens gadījums uz ligzdoto kalpošanas laiku, kas atbilst konkrētam nosaukumam. Tas ļauj izveidot tvēruma singletonus, kur ligzdotie cikli var koplietot komponentus, neveidojot globālas instances.

Noderīga atsevišķām darba vienībām, piemēram, http pieprasījumiem, kas izveidoti kā ligzdoti dzīves cikli. Ja katram HTTP pieprasījumam tiek izveidots ligzdots kalpošanas laiks, tad jebkuram komponentam ar dzīves ilguma tvērumu katram HTTP pieprasījumam būs instance. (Vairāk par katra pieprasījuma dzīves ilgumu zemāk.)

Lielākajā daļā lietojumprogrammu ir nepieciešama tikai viena hierarhiska konteinera ligzdošana, lai attēlotu darba vienību. Ja ir nepieciešami vairāki ligzdoti līmeņi (piemēram, global->request->transaction), var izveidot komponentus, lai tos kopīgotu noteiktā līmenī, izmantojot tagus.



Kad tiek sākts ligzdotais dzīves cikls, tagi tiek saistīti ar šo dzīves ciklu. Jūs saņemsiet izņēmumu, ja mēģināsit atrisināt atbilstības mūža tvēruma komponentu, ja nav pareizi nosaukta mūža tvēruma. (Ja nesaglabātā taga dzīves cikls tiek parsēts, tiks parādīts izņēmums.)



Instance katram pieprasījumam

Dažiem lietojumprogrammu veidiem, protams, ir "pieprasījuma" tipa semantika, piemēram, ASP.NET MVC. Starp šiem lietojumprogrammu veidiem ir noderīgi, ja ir kāda veida "singleton katram pieprasījumam". Instance katram pieprasījumam tiek veidota virs instances uz atbilstošu kalpošanas laiku, nodrošinot labi zināmu mūža tvēruma tagu, reģistrācijas ērtības metodi un integrāciju kopīgai lietojumprogrammai Tipi (viena instance katram pieprasījumam tiek veidota papildus atbilstošajam kalpošanas laikam, nodrošinot labi zināmu mūža tagu, reģistrācijas ērtības metodi un integrāciju kopīgiem lietojumprogrammu tipiem). Būtībā tas ir atbilstošs mūža apjomam.

Tas nozīmē, ka, ja nav pašreizējā pieprasījuma un parsējat komponentu, kas reģistrēts, pamatojoties uz katru gadījumu, tiks izmests izņēmums. Ir detalizēti uzdotie jautājumi, kuros aprakstīts, kā strādāt ar pieprasījuma kalpošanas laiku.

Hipersaites pieteikšanās ir redzama.



Instance katram piederošajam

Īpašumā esošs netiešais relācijas tips, izveidojot jaunu ligzdotu dzīves ciklu. Atkarības var ierobežot līdz resursdatora instancei, reģistrējoties instancē katram piederošajam.



Šajā piemērā pakalpojums ServiceForHandler tiks tvērums līdz īpašumā esošās MessageHandler instances kalpošanas laikam.



Vītnes darbības joma

Jūs varat atsaukties uz to

Hipersaites pieteikšanās ir redzama.

Faktiskā cīņa

Es izmantoju režīmu Instance Per Lifetime Scope.

Winform, kad zvans tiek izpildīts, tas katru reizi izmanto datu bāzes kontekstu, kā parādīts zemāk redzamajā attēlā:



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

Vairāku pavedienu un vienlaicīguma gadījumā, ja izmantojat vienu un to pašu db kontekstu, jūs saskarsieties ar izņēmumiem, pievienojot, dzēšot, modificējot vai pārbaudot datu bāzi.

Es vēlos, lai autofac atgrieztu jaunu objektu katru reizi, kad noklikšķinu uz pogas, kods ir šāds:


Kā parādīts zemāk:



(Beigas)




Iepriekšējo:.NET/C# teksts ar ūdenszīmi attēlu flīzēšanai
Nākamo:ASP.NET Aizliegt piekļuvi žurnālfailiem URL veidā
Publicēts 2022-9-8 09:58:24 |
Tieši tas, kas mums vajadzīgs
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com