Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Cum gestionează MVVMcross reflectarea în timpul construcției obiectelor


Cum gestionează MVVMcross reflectarea în timpul construcției obiectelor


MVVMcross utilizează reflecție pe scară largă în timpul construcției obiectelor, în special prin inversarea containerului său de control (IOC), care este gestionat de instanța Singleton `MVX.IOCPROVIDER`. Iată o imagine de ansamblu detaliată a modului în care MVVMcross gestionează reflectarea în timpul construcției obiectelor:

Injecție de constructor

MVVMcross acceptă injecția constructorului, ceea ce îi permite să rezolve automat parametrii în timpul construcției obiectelor folosind reflecție. La crearea unui obiect, MVVMCross efectuează următorii pași:

1. Reflecție Pentru a găsi constructorul: MVVMcross folosește reflectarea pentru a identifica constructorul clasei instantanee.
2. Rezoluția parametrilor: examinează parametrii ceruți de constructor și identifică interfețele sau tipurile necesare.
3. Rezolva implementările înregistrate: Pentru fiecare parametru, MVVMcross folosește `mvx.iocprovider.resolve ()` pentru a obține implementarea înregistrată pentru interfață sau tip.
4. Invocați constructorul: Odată ce toți parametrii sunt rezolvați, MVVMCross folosește reflectarea pentru a invoca constructorul cu parametrii rezolvați.

Acest proces este recursiv, ceea ce înseamnă că dacă oricare dintre obiectele rezolvate necesită și alte obiecte, MVVMcross îi va rezolva și pe acestea [1] [4].

Înregistrare în vrac prin convenție

MVVMcross acceptă, de asemenea, înregistrarea în vrac a claselor folosind reflecție. Acest lucru se face de obicei în clasa „App”, care moștenește de la `mvxapplication`. Cadrul folosește reflecția pentru a găsi toate clasele din asamblarea de bază care se termină cu „serviciu” și le înregistrează ca singletoni leneși. Acest lucru se realizează prin următorii pași:

1. Găsiți clase care se termină cu „serviciu”: reflecția este folosită pentru a găsi toate clasele cu nume care se termină în „serviciu” în cadrul ansamblului de bază.
2. Identificați interfețele: pentru fiecare clasă găsită, MVVMCross identifică interfețele pe care le implementează.
3. Înregistrați -vă ca singletoni leneși: aceste clase sunt apoi înregistrate ca singletoni leneși împotriva interfețelor respective. Aceasta înseamnă că nu sunt instantanee până când nu sunt solicitate pentru prima dată [2] [4] [7].

ViewModels și Injecția de dependență

MVVMcross folosește același mecanism de injecție a constructorului pentru ViewModels. Când creați un ViewModel, MVVMCross rezolvă orice dependențe specificate în constructor folosind containerul IOC. Aceasta permite personalizarea ușoară a serviciilor pe diferite platforme și facilitează testarea unității, permițând utilizarea implementărilor batjocoritoare [1] [4].

personalizare și AppStart

Clasa „App” este responsabilă de înregistrarea obiectelor personalizate pe containerul IOC și de a începe ViewModels al aplicației. Dacă este necesar, puteți personaliza procesul de pornire folosind o clasă „AppStart” personalizată pentru a decide ce ViewModel trebuie să prezinte primul [2] [7].

În rezumat, MVVMcross folosește reflecția pentru a automatiza procesul de rezolvare a dependențelor în timpul construcției obiectelor, ceea ce face mai ușor gestionarea graficelor de obiecte complexe și susține dezvoltarea multiplă platformă cu cod minim specific platformei.

Citări:
[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-core-project/adding-an-app-class
[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-and-setup