|
|
Julkaistu 14.9.2018 13.22.21
|
|
|
|

Instanssilaajuus määrittää, miten palvelut jaetaan pyyntöjen kesken.
Alkuperäinen osoite:http://docs.autofac.org/en/latest/lifetime/instance-scope.html
Yksi instanssi per riippuvuus
Tämän vaihtoehdon avulla uusi instanssi palautetaan joka kerta, kun palvelua pyydetään. Käytä InstancePerDependency(). Tämä on oletusvaihtoehto. Alla oleva koodi, rivit 2 ja 3, ovat vastaavia.
Seuraava koodi tuottaa uuden instanssin jokaiselle silmukalle, yhteensä 100 instanssia.
Yksittäinen instanssi
Käytä tätä vaihtoehtoa pyytääksesi palvelua joko root- tai sisäkkäisessä scopessa, molemmat palauttavat saman instanssin. Käytä SingleInstance() määritelläksesi.
Alla oleva koodi, w1 ja w2, ovat aina sama objekti, ja Worker-luokan instanssi on vain yksi 100 silmukassa.
Yksi instanssi per elinkaaren laajuus
Käytä tätä vaihtoehtoa pyytääksesi palvelua tietyssä ILifetimeScopessa, jolloin palautetaan vain yksi instanssi. Käytä InstancePerLifetimeScope(). Seuraavassa koodissa 100 kertaa w1 scope1:ssä on sama objekti, ja 100 kertaa w2 scope2:ssa ovat sama objekti, mutta w1 ja w2 eivät ole sama objekti.
Yksi instanssi per vastaava elinkaaren alue
Samankaltainen kuin [yksi instanssi per elinkaaren scope] yllä, mutta enemmän hallintaa. Käytä tätä vaihtoehtoa, jotta ILifetimeScope-objektille voidaan antaa tunniste. Tag-ottelun alueella on vain yksi tapaus. Käytä InstancePerMatchingLifetimeScope()-menetelmää.
Alla olevassa koodissa w1 ja w2 ovat samat, w3 ja w4 ovat samat, mutta w1 ja w3 ovat erilaisia.
Sopiva merkintä on annettava jäsentämisen yhteydessä, ja seuraava koodi heittää poikkeuksen.
Yksi instanssi per pyyntö
Joissakin sovelluksissa on luonnollisesti Request-semantiikkaa, kuten ASP.NET MVC- tai WebForm-sovellukset. [Yksi instanssi per pyyntö] toteutetaan perustuen [yksi instanssi per vastaava elinkaaren alue], tarjoamalla laajuusmerkintöjä, rekisteröintifunktioita ja yhteisen tyyppiintegraation. Käytännössä [yksi instanssi per vastaava elinkaaren alue].
ASP.NET Core käyttää yhtä instanssia per elinkaaren laajuus yhden instanssin sijaan per pyyntö.
Yksi instanssi per Omistettu
Omistettu<T> implisiittinen assosiaatiotyyppi luo sisäkkäisiä elinkaaren alueita. Instanssikohtaisella rekisteröinnillä voit rajoittaa riippuvuuksia omitettuihin instansseihin.
Tässä tapauksessa ServiceForHandler-palvelu rajoittuu MessageHandler-instanssin laajuuteen.
Lankavalikoima
Autofac voi pakottaa säikeen A objektit olemaan täyttämättä säikeen B riippuvuuksia.
Sitten kukin luo oman elinikäisen laajuutensa
Tärkeää: Monisäikeisessä tilanteessa ole varovainen, ettet siisti vanhemman scopea.Muuten johdetun säikeen aliskoopit eivät pysty ratkaisemaan palvelua.
Jokaisella säikeellä on oma MyThreadScopedComponent-instanssi, joka on käytännössä elinkaaren mittakaava singleton. Laajuuden instansseja ei tarjota ulkoisesti, joten komponentit on helppo pitää erillään säikeiden välillä.
Lisäämällä ILifetimeScope-parametrin vanhemmat alueet voidaan injektoida säikeen luovaan koodiin, ja Autofac syöttää automaattisesti nykyisen alueen, jota voidaan käyttää sisäkkäisten scopejen luomiseen.
Jos haluat hallita sitä tarkemmin, voit käyttää [yksi instanssi per vastaava elinkaaren alue] yhdistääksesi säikeellä skooppiset komponentit sisäisiin elinkaaren mittakoputkiin, kuten kuvassa näkyy:
Kaavion "Konteksti" on BeginLifetimeScope-menetelmän luoma elinkaaren alue.
|
Edellinen:Käyttöliittymän hiiren klikkausefektit: vapaus, demokratia, vaurausSeuraava:{"error_msg": "IAM-sertifiointi epäonnistui"}
|