IoC ~ Efektyvus Autofac
Nėra abejonių, kad "Microsoft" mėgstamiausias daiktų interneto konteineris yra ne spring.net, vienybė, o "Autofac" dėl savo efektyvumo, dėl paprastumo, todėl jis taip pat naudojamas "Microsoft" vadovaujamiems sodo projektams
iliustruoja Autofac naudojimą.
Pavadinkime tai dabar:
Kitoje paskaitoje kalbėsiu apie Autofac naudojimą konkrečiuose sodo projektų projektuose.
Dabar pažvelkite į jo gyvavimo ciklą
1 、 InstancePerDependency
Sukurkite naują unikalų kiekvienos priklausomybės ar iškvietimo egzempliorių. Tai taip pat yra numatytasis egzempliorių kūrimo būdas.
Oficialioje dokumentacijoje paaiškinama: Konfigūruokite komponentą taip, kad kiekvienas priklausomas komponentas arba iškvietimas į Resolve() gautų naują, unikalų egzempliorių (numatytasis.)
2 、 InstancePerLifetimeScope
Ciklo domene kiekviena priklausomybė arba iškvietimas sukuria vieną bendrai naudojamą egzempliorių, o kiekvienam skirtingam ciklo domenui egzempliorius yra unikalus ir nebendrinamas.
Oficialioje dokumentacijoje paaiškinama: Konfigūruokite komponentą taip, kad kiekvienas priklausomas komponentas arba Resolve() iškvietimas viename ILifetimeScope gautų tą patį bendrinamą egzempliorių. Priklausomi komponentai skirtingose gyvenimo trukmės srityse gaus skirtingus egzempliorius.
3 、 InstancePerMatchingLifetimeScope
Identifikuotame ciklo domene kiekviena priklausomybė arba iškvietimas sukuria vieną bendrinamą egzempliorių. Pirminio domeno egzemplioriai gali būti bendrinami identifikuoto ciklo domeno antrinės tapatybės domene. Jei visoje paveldėjimo hierarchijoje nerandamas joks identifikuotas ciklo domenas, pateikiama išimtis: DependencyResolutionException.
Oficialiuose dokumentuose paaiškinama: sukonfigūruokite komponentą taip, kad kiekvienas priklausomas komponentas arba iškvietimas į Resolve() ILifetimeScope, pažymėtą bet kuria iš pateiktų žymių reikšmės, gautų tą patį bendrinamą egzempliorių. Priklausomi komponentai visą gyvenimą trunkančiose aprėptyse, kurie yra pažymėtos aprėpties antriniai elementai, bendrins pirminio egzemplioriaus egzempliorių. Jei hierarchijoje nerandama tinkamai pažymėtos aprėpties, pateikiama DependencyResolutionException.
4、InstancePerOwned
Egzemplioriaus, kurį sukūrė egzempliorius, priklausantis ciklo domenui, gyvavimo ciklo metu kiekvienas priklausomas komponentas arba metodo Resolve() iškvietimas sukuria vieną bendrai naudojamą egzempliorių, o antrinis ciklo domenas bendrina egzempliorius pirminiame ciklo domene. Jei paveldėjimo hierarchijoje nerandamas tinkamas ciklo domenas su antriniais egzemplioriais, pateikiama išimtis: DependencyResolutionException.
Oficialiuose dokumentuose paaiškinama:
Sukonfigūruokite komponentą taip, kad kiekvienas priklausomas komponentas arba Resolve() iškvietimas ILifetimeScope, kurį sukūrė priklausantis egzempliorius, gautų tą patį bendrai naudojamą egzempliorių. Priklausomi komponentai visą gyvenimą trunkančiose aprėptyse, kurie yra priklausančios egzemplioriaus aprėpties antriniai elementai, bendrins pirminio egzemplioriaus egzempliorių. Jei hierarchijoje nerandama tinkamos priklausančios egzemplioriaus aprėpties, pateikiama DependencyResolutionException.
5 、 Vienas egzempliorius
Kiekvieną kartą, kai priklausote nuo komponento arba iškviečiate Resolve() metodą, gaunate tą patį bendrinamą egzempliorių. Tiesą sakant, tai yra viengubas modelis.
Oficialioje dokumentacijoje paaiškinama: sukonfigūruokite komponentą taip, kad kiekvienas priklausomas komponentas arba iškvietimas į Resolve() gautų tą patį bendrinamą egzempliorių.
6 、 InstancePerHttpRequest
Pateikdami Http užklausą, bendrinkite komponento egzempliorių. Galima tik asp.net MVC kūrimui.
|