Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hogyan kezeli az mvvmcross a tükröződést az objektum felépítése során?


Hogyan kezeli az mvvmcross a tükröződést az objektum felépítése során?


Az MVVMCross az objektum felépítése során széles körben alkalmazza a reflexiót, különösen a Control (IOC) tartály inverziója révén, amelyet az `mvx.iocprovider` singleton példány kezeli. Itt található egy részletes áttekintés arról, hogy az MVVMCross hogyan kezeli a tükröződést az objektum felépítése során:

konstruktor injekció

Az MVVMCross támogatja a konstruktor befecskendezését, amely lehetővé teszi a paraméterek automatikus megoldását az objektum felépítése során reflexióval. Objektum létrehozásakor az MVVMCross a következő lépéseket hajtja végre:

1. reflexió a konstruktor megtalálásához: Az MVVMCross reflexióval azonosítja az instantált osztály konstruktorát.
2. Paraméter felbontás: Megvizsgálja a konstruktor által megkövetelt paramétereket, és azonosítja a szükséges interfészeket vagy típusokat.
3. A regisztrált megvalósítások megoldása: Minden paraméternél az MVVMCross az `mvx.iocProvider.resolve ()` -t használja az interfész vagy típus regisztrált megvalósításának megszerzéséhez.
4. Invoke konstruktor: Miután az összes paraméter megoldódott, az MVVMCross reflexiót használ a konstruktor meghívására a felbontott paraméterekkel.

Ez a folyamat rekurzív, vagyis ha a megoldott objektumok bármelyikére más objektumokat is igényelnek, az MVVMCross oldja meg azokat is [1] [4].

ömlesztett regisztráció egyezmény szerint

Az MVVMCROSS támogatja az osztályok tömeges regisztrációját a reflexió segítségével. Ezt általában az „App” osztályban végzik, amely a „mvxApplication” -ből örököl. A keret a reflexiót használja, hogy megtalálja az összes osztályt a központi szerelvényben, amely a "Szolgáltatás" -val végződik, és lusta szingulettként regisztrálja őket. Ezt a következő lépésekkel érik el:

1. Keresse meg a "Szolgáltatás" végződő osztályokat: A reflexiót arra használják, hogy megtalálják az összes olyan osztályt, amelynek neve a "Szolgáltatás" végződik.
2. Az interfészek azonosítása: Az egyes talált osztályok esetében az MVVMCross azonosítja az általa végrehajtott interfészeket.
3. regisztráljon lusta szingulettként: Ezeket az osztályokat ezután lusta szingulettként regisztrálják a megfelelő interfészekkel szemben. Ez azt jelenti, hogy addig nem jelennek meg, amíg először nem kérik őket [2] [4] [7].

ViewModels és függőségi injekció

Az MVVMCross ugyanazt a konstruktor injekciós mechanizmust használja a ViewModels -hez. A ViewModel létrehozásakor az MVVMCross a konstruktorban megadott függőségeket oldja meg a NOB -konténer segítségével. Ez lehetővé teszi a szolgáltatások egyszerű testreszabását a különböző platformokon keresztül, és megkönnyíti az egység tesztelését azáltal, hogy lehetővé teszi a modell megvalósításának használatát [1] [4].

Testreszabás és AppStart

Az `App` osztály felelős az egyedi objektumok regisztrálásáért a NOB -tárolón és az alkalmazás ViewModels elindításáért. Szükség esetén testreszabhatja az indítási folyamatot egy egyedi „Appstart” osztály használatával, hogy eldöntse, melyik ViewModel jelenik meg először [2] [7].

Összefoglalva: az MVVMCross kihasználja a reflexiót, hogy automatizálja a függőségek feloldásának folyamatát az objektum felépítése során, megkönnyítve a komplex objektumok grafikonjainak kezelését és a platformok közötti fejlesztés támogatását minimális platformspecifikus kóddal.

Idézetek:
[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create--first-xamarin-app/creating-the-core-project/adding-anp-plass
[3] http://wojosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross platform
[6] https://github.com/media-tools/sqlite-net-extensions
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-andsetup