TOC (valdymo inversija) konteineris MVVMCross vaidina lemiamą vaidmenį valdant priklausomybes tarp skirtingų programos komponentų. Tai yra pagrindinė sistemos dalis, palengvinanti kontrolės principo inversijos įgyvendinimą, kuris atsiejamas nuo jų priklausomybių, todėl sistema tampa modulinė ir lengviau išbandoma.
Pagrindinės IOC konteinerio funkcijos MVVMCross
1. Priklausomybės injekcija: IOC konteineris yra atsakingas už priklausomybių į klases išsprendimą ir įpurškimą. Tai pasiekiama atliekant konstruktoriaus įpurškimą, kai talpyklą kuriant objektą automatiškai suteikia reikiamos priklausomybės. Pvz., Kai „ViewModel“ yra akimirksniu, IOC konteineris išskiria ir įpareigoja jo priklausomybes, tokias kaip paslaugos ar kitos sąsajos, į savo konstruktorių [1] [5].
2. Registracija ir skiriamoji geba: konteineris leidžia kūrėjams užregistruoti sąsajas su atitinkamais diegimais. Užsiregistravusi, bet kuri programos dalis gali paprašyti sąsajos egzemplioriaus, o konteineris pateiks registruotą įgyvendinimą. Tai atliekama naudojant tokius metodus kaip „mvx.iocprovider.resolve“ arba „mvx.iocprovider.iocconstruct` [1] [5].
3. „Singleton“ egzempliorius: „Mvvmcross“ naudoja IOC konteinerio pavienį egzempliorių, prieinamą per `mvx.iocprovider`. Šis „Singleton“ yra pagrindinis taškas registruojant ir išspręsdami priklausomybes visoje programoje [1] [5].
4. Vaikų konteineriai: Nors MVVMCross pirmiausia naudoja vieną konteinerį, jis palaiko vaikų konteinerių kūrimą konkrečiais tikslais. Šie vaikų konteineriai paveldi visas registracijas iš savo pagrindinio konteinerio, leidžiančio registruoti registracijas, kurių nėra visos taikymo srityje [1] [3].
5. Aptarnavimo ieškojimo modelis: IOC konteineris taip pat įgyvendina paslaugų ieškiklio modelį, kuris suteikia galimybę gauti paslaugas ar egzempliorius iš konteinerio. Šis modelis yra naudingas, kai neįmanoma tiesioginės priklausomybės injekcijos [1].
vaidmuo MVVMCROSS programose
„MVVMCross“ programose IOC konteineris yra būtinas norint valdyti „ViewModels“ ir kitų komponentų gyvavimo ciklą. Čia yra keletas pagrindinių vaidmenų, kuriuos jis vaidina:
- „ViewModel Construction“: kai prašoma „ViewModel“, „MvVMCross“ naudoja IOC konteinerį, kad jį būtų galima įgyvendinti ir sušvirkšti jo priklausomybes. Tai užtikrina, kad „ViewModels“ būtų atsiejami nuo konkrečių diegimų, todėl programa tampa lankstesnė ir palankesnė [9].
-Kryžminio platformos palaikymas: IOC konteineris padeda valdyti konkrečias platformai skirtas paslaugas ir įgyvendinimus, leisdamas skirtingoms įvairių platformų registracijoms. Pvz., Vietumo tarnyba gali būti įdiegta skirtingai „iOS“, palyginti su „Android“, o IOC konteineris gali išspręsti teisingą įgyvendinimą pagal platformą [1].
- Tinkinimas ir plėtra: Kūrėjai gali pritaikyti IOC konteinerį, pakeisdami jį alternatyviais diegimais arba sukurdami adapterius kitoms IOC sistemoms. Šis lankstumas yra naudingas integruojant trečiųjų šalių bibliotekas, kurioms reikalingos specifinės IOC konfigūracijos [4] [8].
Apibendrinant galima pasakyti, kad MVVMCross IOC konteineris yra galingas įrankis, skirtas valdyti priklausomybes ir skatinti laisvą sujungimą tarp programų komponentų. Tai supaprastina plėtros procesą automatizuodamas priklausomybės injekciją ir pateikdamas centralizuotą paslaugų ir programos atvejų išsprendimo mechanizmą.
Citatos:[1] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[2] https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/february/mvvm-ioc-containers-and-mvvm
[3] https://stackoverflow.com/questions/16514691/child-containers-in-mvvmcross-ioc
[4] https://stackoverflow.com/questions/64478974/replace-mefault-ioc-container-in-mvvmcross
[5] https://www.mvvmcross.com/documentation/tutorials/TIPCalc/the-core-project
[6] https://www.reddit.com/r/askprogramming/comments/pdw4pu/what_is_the_real_purpose_of_ioc_container/
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/advanced/customizing-using-app ir-setup
[9] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle