„Microsoft.Extensions.Dependencyinnection“ naudojimas naudojant „MVVMCross“ gali pateikti keletą iššūkių ir žinomų problemų:
1. Nesuderinamumas su „MVVMCross“ paleidimo procesu: „MVVMCross“ reikalauja galimybę išspręsti komponentus iš dalies per sąrankos procesą ir toliau registruoti daugiau komponentų. Tačiau „Microsoft.Extensions.DEPENDENCIJACIJA“ (MS.DI) reikalauja, kad visi komponentai būtų užregistruoti prieš skambinant į „.Build ()` `` Service Collection. Dėl šio esminio skirtumo abi sistemos nesuderinamos be papildomų sprendimų, pavyzdžiui, rankiniu būdu verčiant paslaugas iš vieno konteinerio į kitą [1].
2. Dviejų pakopų paleidimo procesas: Norėdami panaudoti MS.DI naudodamiesi „MVVMCross“, kūrėjai dažnai kuria MS.DI paslaugų rinkimą ir išverčia jos paslaugas į MVVMCross `imvxiocprovider` egzempliorių. Šis požiūris pristato dviejų pakopų paleidimo procesą, kuris gali būti sudėtingas ir gali sukelti papildomą sudėtingumą ir potencialius klausimus [1].
3. Priklausomybės injekcijos apribojimai: MVVMCROSS IOC konteineris gydo singletono aspektą sąsajos lygyje, o ne momentiniu tipu. Tai reiškia, kad jei klasė įgyvendina kelias sąsajas, MVVMCross gali sukurti atskirus kiekvienos sąsajos egzempliorių, nebent tai būtų aiškiai valdoma [4]. Nors tai nėra tiesiogiai susiję su MSDI, jis pabrėžia, kad integruojant skirtingas priklausomybės injekcijų sistemas reikia kruopščiai valdyti poreikį.
4. Atnaujinimo ir suderinamumo problemos: „MVVMCross“ versijų atnaujinimas kartais gali sukelti priklausomybės injekcijos problemas, ypač naudojant „Base View“ modelius. Pvz., Konstruktorių pasirinkimo logikos pokyčiai tarp versijų gali turėti įtakos tam, kaip suleidžiamos priklausomybės [2].
Norėdami įveikti šiuos iššūkius, kūrėjai dažnai pasirenka patobulinti MVVMCross funkcionalumą nepakeisdami pagrindinio IOC konteinerio. Tai leidžia naudoti papildomas priklausomybės injekcijos sistemas, tokias kaip MSDI kartu su MVVMCross, suteikiant lankstumo renkantis IOC teikėją [1] [5]. Tačiau tam reikia kruopštaus nustatymo ir valdymo, kad būtų išvengta konfliktų ir užtikrinta sklandi integracija.
Apibendrinant galima pasakyti, kad naudojant „Microsoft.Extensions.Dependencyinnection“ su MVVMCross yra įmanoma, reikia atidžiai apsvarstyti paleidimo procesą, potencialų nesuderinamumą ir kruopščiai valdyti priklausomybes, kad būtų išvengta žinomų problemų.
Citatos:[1] https://github.com/mvvmcross/mvvmcross/issues/4436
[2] https://github.com/mvvmcross/mvvmcross/issues/4183
[3] https://docs.particular.net/nservicebus/dependency-innection/extensions-dependencyInection
[4] https://stackoverflow.com/questions/23700121/posible-bug-with-dependency-on-mvvmcross
[5] https://github.com/mvvmcross/mvvmcross/issues/3804
[6] https://www.mvvmcross.com/documentation/fundamentals/data-dinding
[7] https://msicc.net/using-microsofts-axtensions-dependencyinnection-package-in-xamarin-forms-mvvm-appliction-part-2/
[8] https://www.mvvmcross.com/documentation/fundamentals/dependency injection