Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 24701|Atsakyti: 1

[Šaltinis] "Autofac" valdo apimtį ir tarnavimo laiką

[Kopijuoti nuorodą]
Publikuota: 2020-9-19 12:51:52 | | | |
Geras straipsnis, skirtas sužinoti apie "Autofac" valdymo aprėptį ir gyvavimo ciklą, ciklo aprėptis yra lygiavertė jūsų programos darbo vienetui, darbo vienetas pradžioje pradės ciklo aprėptį, o tada tarnybos, kurioms reikalingas tas darbo vienetas, bus išanalizuotos iš ciklo aprėpties.

Taikymo sritys visą gyvenimą

Sukurkite "Lifetme" taikiklius

Aprėpties kūrimas rankiniu būdu ir perleidimas. Visą gyvenimą trunkantys taikikliai yra vienkartiniai ir jie seka komponentų šalinimą, todėl įsitikinkite, kad visada skambinate "Dispose()" arba apvyniokite juos "naudojant" teiginius.




Etikečių naudojimo trukmės apimtys

Kartais gali tekti bendrinti kai kurias paslaugas darbo vienete, bet nenorite naudoti visuotinio bendrinimo patogumų, pvz., vieno režimo. Pavyzdžiui, žiniatinklio programos kiekvienos užklausos ciklas, tokiu atveju galite naudoti InstancePerMatchingLifetimeScope, kad nustatytumėte savo gyvavimo ciklą ir paslaugą.

Pavyzdžiui, yra komponentas, kuris siunčia laiškus, o operacijų logika turi siųsti pranešimus kelis kartus, todėl pašto paslauga gali būti bendrinama kiekvienoje loginės operacijos dalyje. Jei nenorite, kad el. pašto komponentas būtų visuotinis vienetas, galite jį nustatyti taip.



Registracijų įtraukimas į visą gyvenimą trunkančią aprėptį

"Autofac" leidžia pridėti "skrendant" kuriant gyvavimo ciklą. Tai gali padėti, kai jums reikia atlikti tam tikrą "taškinio suvirinimo" ribotos registracijos nepaisymą arba jei jums apskritai reikia papildomų dalykų, kurių nenorite registruoti visame pasaulyje. Tai galite padaryti perduodami lambda į BeginLifetimeScope(), kuris paima ContainerBuilder ir prideda registracijas. (Kurdami palaikymo ciklą, užregistruokite papildomas paslaugas be visuotinės registracijos)



Egzemplioriaus aprėptis

Egzemplioriaus aprėptis nustato, kaip egzempliorius bendrinamas tarp užklausų. Prašydamas paslaugos, autofac gali grąžinti vieną egzemplioriaus aprėptį, naują egzempliorių kiekvienai priklausomybės aprėpčiai arba vieną kontekstą, pvz., giją arba HTTP užklausą per visą gyvenimą. Tai taikoma egzemplioriams, grąžintiems iš aiškaus Resolve() iškvietimo, taip pat egzemplioriams, kuriuos konteineris sukūrė viduje, kad patenkintų kito komponento priklausomybes.

  • Egzempliorius pagal priklausomybę
  • Vienas egzempliorius
  • Egzempliorius per visą laikotarpį
  • Egzempliorius pagal atitinkančią gyvavimo apimtį
  • Egzempliorius pagal užklausą
  • Egzempliorius vienam priklausančiam
  • Siūlų taikymo sritis


Egzempliorius pagal priklausomybę

Kituose konteineriuose taip pat vadinamas trumpalaikiu arba "gamykliniu", jis pateikia unikalų egzempliorių kiekvieną kartą, kai prašoma paslaugos. Jei nenurodytas gyvavimo ciklas, tai yra numatytasis veikimas.



Kiekviena priklausomybė Resolve pateikia naują komponentą.



Vienas egzempliorius

Tas pats egzempliorius grąžinamas visose užklausose ir įdėtose aprėptyse.




Egzempliorius per visą laikotarpį

Šią aprėptį galima taikyti įdėtosioms aprėptims. Trukmės aprėpties komponentas turi ne daugiau kaip vieną egzempliorių įdėtoje aprėptyje. Tai naudinga objektams, būdingiems vienam darbo vienetui, kuriems gali reikėti įdėti papildomų loginių darbo vienetų. Kiekviena įdėtoji trukmės aprėptis gaus naują užregistruotos priklausomybės egzempliorių.



Kai analizuojate aprėpties egzemplioriaus komponentą, kiekvienoje įdėtoje aprėptyje yra tik vienas egzempliorius (pvz., darbo vienetas).


Egzempliorius pagal atitinkančią gyvavimo apimtį

Tai panašu į egzempliorių per visą gyvenimą, tačiau valdymas gali būti bendrinamas su tikslesniais egzemplioriais. Kurdami įdėtąjį ciklą, galite jį pažymėti arba pavadinti. Komponentas su atitikimo trukmės aprėptimi turės ne daugiau kaip vieną egzempliorių kiekvienoje įdėtoje aprėptyje, atitinkančią nurodytą pavadinimą。 Tai leidžia kurti aprėpties vienetus, kur įdėtieji ciklai gali bendrinti komponentus nesukurdami globalių egzempliorių.

Naudinga atskiriems darbo vienetams, pvz., http užklausoms, sukurtoms kaip įdėtieji ciklai. Jei kiekvienai HTTP užklausai sukuriamas įdėtasis laikotarpis, bet kuris komponentas, turintis visą HTTP užklausą, turės egzempliorių kiekvienai HTTP užklausai. (Daugiau apie užklausos taikymo sritį žemiau.)

Daugelyje programų darbo vienetui pavaizduoti reikalingas tik vienas hierarchinis konteinerio įdėjimas. Jei reikalingi keli įdėtieji lygiai (pvz., global->request->transaction), galima sukurti komponentus, kuriuos galima bendrinti tam tikru lygiu naudojant žymas.



Kai pradedamas įdėtasis ciklo ciklas, žymės susiejamos su tuo ciklu. Gausite išimtį, jei bandysite išspręsti atitikimo trukmės aprėpties komponentą, kai nėra teisingai pavadintos taikymo srities. (Jei neįrašytos žymės gyvavimo ciklas bus išanalizuotas, įvyks išimtis.)



Egzempliorius pagal užklausą

Kai kurie programų tipai natūraliai turi "užklausos" tipo semantiką, pvz., ASP.NET MVC. Tarp šių programų tipų naudinga turėti tam tikrą "singleton per užklausą". Egzempliorius per užklausą remiasi egzemplioriumi pagal atitinkamą taikymo sritį, pateikdamas gerai žinomą viso gyvenimo apimties žymą, registracijos patogumo metodą ir integraciją bendrai programai tipai (vienas kiekvienos užklausos egzempliorius yra sukurtas ant atitinkamos trukmės aprėpties, pateikiant gerai žinomą trukmės žymą, registracijos patogumo metodą ir integraciją įprastiems programų tipams). Iš esmės, jis yra pagal atitinkamą gyvenimo apimtį.

Tai reiškia, kad jei nėra dabartinės užklausos ir analizuojate komponentą, užregistruotą pagal kiekvienos užklausos egzempliorių, bus pateikta išimtis. Yra išsamūs DUK, kuriuose aprašoma, kaip dirbti su kiekvienos užklausos gyvenimu.

Hipersaito prisijungimas matomas.



Egzempliorius vienam priklausančiam

Priklausantis numanomo ryšio tipas, sukuriantis naują įdėtąjį ciklo ciklą. Priklausomybes galima apriboti pagrindinio kompiuterio egzemplioriumi registruojantis egzemplioriuje vienam priklausančiam egzemplioriui.



Šiame pavyzdyje ServiceForHandler paslauga bus aprėpta pagal priklausančio MessageHandler egzemplioriaus galiojimo laiką.



Siūlų taikymo sritis

Galite jį nurodyti

Hipersaito prisijungimas matomas.

Tikroji kova

Aš naudoju egzemplioriaus per visą gyvenimą taikymo srities režimą.

"winform", kai skambutis vykdomas, jis kiekvieną kartą naudoja duomenų bazės kontekstą, kaip parodyta paveikslėlyje žemiau:



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

Kelių gijų ir sutapimo atveju, jei naudojate tą patį db kontekstą, pridėdami, ištrindami, keisdami ar tikrindami duomenų bazę susidursite su išimtimis.

Noriu, kad autofac grąžintų naują objektą kiekvieną kartą, kai paspaudžiu mygtuką, kodas yra toks:


Kaip parodyta žemiau:



(Pabaiga)




Ankstesnis:.NET/C# vandens ženklu pažymėtas tekstas plytelių vaizdams
Kitą:ASP.NET Uždrausti prieigą prie žurnalo failų URL pavidalu
Paskelbta 2022-9-8 09:58:24 |
Būtent tai, ko mums reikia
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com