See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 24701|Vastuse: 1

[Allikas] Autofac kontrollib ulatust ja eluiga

[Kopeeri link]
Postitatud 2020-9-19 12:51:52 | | | |
Hea artikkel, et õppida Autofaci juhtimisulatuse ja elutsükli kohta, elutsükli ulatus on sinu rakenduses samaväärne tööühikuga, tööühik alustab elutsükli ulatust algusest ning seejärel parsitakse teenused, mis vajavad seda tööühikut, elutsükli ulatusest.

Eluaegsed skoobid

Loo Lifetme teleskoopid

Loo käsitsi sihik ja hävita. Eluaegsed teleskoobid on ühekordsed ja jälgivad komponentide utiliseerimist, seega kindlasti helista alati "Dispose()" või pakkige need "using" lausetesse.




Plaadifirma eluea ulatused

Mõnikord võib vaja minna mõningaid teenuseid tööüksuse sees jagada, kuid sa ei taha kasutada globaalseid jagamise mugavusi, nagu üksikrežiim. Näiteks veebirakenduse päringupõhine elutsükkel, mille puhul saate kasutada InstancePerMatchingLifetimeScope'i, et tuvastada oma elutsükkel ja teenus.

Näiteks on olemas komponent, mis saadab kirju, ja tehinguloogika peab saatma sõnumeid mitu korda, nii et meiliteenust saab jagada igas loogilises tehingulõigus. Kui sa ei taha, et e-posti komponent oleks globaalne üksik, saad selle seadistada järgmiselt.



Registreeringute lisamine eluaegsesse ulatusse

Autofac võimaldab lisada "jooksvalt" elutsükli loomisel. See võib aidata, kui on vaja teha mingisugust "punktkeevituse" piiratud registreerimise ülekirjutust või kui vajad lihtsalt lisavarustust teleskoobis, mida sa globaalselt registreerida ei taha. Seda teed, saates lambda BeginLifetimeScope()-le, mis võtab ContainerBuilderi ja lisab registreerimised. (Elutsükli loomisel registreeri täiendavad teenused ilma globaalse registreerimiseta)



Eksemplari ulatus

Instantsi ulatus määrab, kuidas instants jagatakse päringute vahel. Teenuse taotlemisel võib autofac tagastada ühe instantsi ulatuse, uue instantsi sõltuvusulatuse kohta või ühe üksiku konteksti, näiteks lõime või HTTP päringu eluea ulatuse kohta. See kehtib nii eksemplaridele, mis tagastatakse eksplicitsetest Resolve() kutsest, kui ka instantsi sisemiselt loodud instantside kohta, et rahuldada teise komponendi sõltuvusi.

  • Instants sõltuvuse kohta
  • Üksik instants
  • Eksemplari eluea ulatus
  • Instantsi sobitamise eluea ulatus
  • Instants päringu kohta
  • Instants omanduses olevate instantside kaupa
  • Lõime ulatus


Instants sõltuvuse kohta

Teistes konteinerites nimetatakse seda ka transient' või 'factory' ning iga kord, kui teenust taotletakse, tagastab see unikaalse instantsi. Kui elutsüklit pole määratud, on see vaikimisi käitumine.



Iga Resolve'i sõltuvus tagastab uue komponendi.



Üksik instants

Sama instants tagastatakse kõigi päringute ja pesastatud ulatuste puhul.




Eksemplari eluea ulatus

Seda ulatust saab rakendada pesastatud sihikutele. Eluea ulatuse komponendil on maksimaalselt üks instants pesastatud ulatuses. See on kasulik objektide puhul, mis on spetsiifilised ühele tööühikule, mis võivad vajada täiendavate loogiliste tööühikute pesastamise kohta. Iga pesastatud eluaegne skoop saab registreeritud sõltuvuse uue eksemplari.



Kui parsida eluea ulatuse instantsi komponenti, on igas pesastatud ulatuses ainult üks eksemplar (nt tööühiku kohta).


Instantsi sobitamise eluea ulatus

See on sarnane Instance Per Lifetime Scope'iga, kuid kontrolli saab jagada täpsemate instantsidega. Kui lood pesastatud elutsükli, saad sellele märgistada või nime anda. Komponendil, millel on sobitus-eluea ulatus, on maksimaalselt üks instants pesastatud eluea ulatuse kohta, mis vastab antud nimele。 See võimaldab luua ulatusega üksiksüsteeme, kus pesastatud tsüklid saavad jagada komponente ilma globaalseid instantse loomata.

Kasulik üksikute tööühikute, näiteks http-päringute puhul, mis on loodud pesastatud elutsüklitena. Kui iga HTTP-päringu kohta luuakse pesastatud eluiga, siis igal komponendil, millel on eluea ulatus, on iga HTTP-päringu kohta üks eksemplar. (Allpool lähemalt soovipõhise eluaegse ulatuse kohta.)

Enamikes rakendustes on tööühiku esindamiseks vaja vaid ühte hierarhilist konteineri pesastust. Kui on vaja mitut pesastatud taset (nt globaalne >päringu->tehing), saab luua komponente, mida jagatakse kindlal tasemel siltide kaudu.



Kui pesastatud elutsükkel algab, seostatakse sildid selle elutsükliga. Erandiks saad, kui püüad lahendada iga eluea ulatuse komponendi, kui õigesti nimetatud eluea ulatust pole. (Kui salvestamata sildi elutsükkel on parsitud, tekib erand.)



Instants päringu kohta

Mõnel rakendustüübil on loomulikult "taotluse" tüüpi semantika, näiteks ASP.NET MVC. Nende rakendustüüpide seas on kasulik, kui on olemas mingi "singleton per request" vorm. Iga päringu instants tugineb vastavale eluea ulatusele, pakkudes tuntud eluaegse ulatuse silti, registreerimismugavuse meetodit ja integratsiooni ühiskasutuseks tüübid (üks eksemplar iga päringu kohta ehitatakse vastavuse eluea ulatuse peale, pakkudes tuntud eluea silti, registreerimismugavuse meetodit ja integratsiooni levinud rakendustüüpide jaoks). Põhimõtteliselt kehtib see vastavalt vastavale eluaegsele ulatusele.

See tähendab, et kui praegust päringut ei ole ja sa parsid komponenti instants-per-request alusel, siis tehakse erand. Seal on üksikasjalik KKK, mis selgitab, kuidas töötada päringupõhiste eludega.

Hüperlingi sisselogimine on nähtav.



Instants omanduses olevate instantside kaupa

Omanduses olnud implitsiitne suhetüüp, luues uue pesastatud elutsükli. Sõltuvusi saab piirata host-instantsiga, registreerides instance-per-owned.



Selles näites on ServiceForHandler teenus ulatuses omanduses oleva MessageHandleri instantsi eluea ulatuses.



Lõime ulatus

Võid sellele viidata

Hüperlingi sisselogimine on nähtav.

Tegelik lahing

Kasutan Instance Per Lifetime Scope režiimi.

winformis, kui kõne käivitatakse, kasutatakse iga kord andmebaasi konteksti, nagu alloleval joonisel näidatud:



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

Mitmelõimelise ja paralleelsuse puhul, kui kasutate sama andmebaasi konteksti, tekivad erandeid andmebaasi lisamisel, kustutamisel, muutmisel või kontrollimisel.

Soovin, et autofac tagastaks iga kord, kui nuppu vajutan, uus objekt, kood on järgmine:


Nagu allpool näidatud:



(Lõpp)




Eelmine:.NET/C# Vesimärgiga tekst piltide plaatimiseks
Järgmine:ASP.NET Keelata ligipääs logifailidele URL-ide kujul
Postitatud 2022-9-8 09:58:24 |
Täpselt see, mida me vajame
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com