Το MVVMCROSS χρησιμοποιεί εκτενώς αντανάκλαση κατά τη διάρκεια της κατασκευής αντικειμένων, ιδιαίτερα μέσω της αναστροφής του δοχείου ελέγχου (IOC), το οποίο διαχειρίζεται το `MVX.iocprovider` singleton instance. Ακολουθεί μια λεπτομερής επισκόπηση του τρόπου με τον οποίο η MVVMCROSS χειρίζεται τον προβληματισμό κατά τη διάρκεια της κατασκευής αντικειμένων:
Έγχυση κατασκευαστή
Το MVVMCROSS υποστηρίζει την ένεση κατασκευαστή, η οποία του επιτρέπει να επιλύει αυτόματα τις παραμέτρους κατά τη διάρκεια της κατασκευής αντικειμένων χρησιμοποιώντας αντανάκλαση. Κατά τη δημιουργία ενός αντικειμένου, το MVVMCROSS εκτελεί τα παρακάτω βήματα:
1. Προβληματισμός Για να βρείτε τον κατασκευαστή: Το MVVMCROSS χρησιμοποιεί αντανάκλαση για να προσδιορίσει τον κατασκευαστή της κλάσης που παρουσιάζεται.
2. Ανάλυση παραμέτρων: Εξετάζει τις παράμετροι που απαιτούνται από τον κατασκευαστή και προσδιορίζει τις διεπαφές ή τους τύπους που απαιτούνται.
3. Επίλυση καταχωρημένων υλοποιήσεων: Για κάθε παράμετρο, το MVVMCROSS χρησιμοποιεί `mvx.iocprovider.resolve ()` για να λάβετε την καταχωρημένη εφαρμογή για τη διεπαφή ή τον τύπο.
4. Invoke Constructor: Μόλις επιλυθούν όλες οι παράμετροι, το MVVMCross χρησιμοποιεί αντανάκλαση για να καλέσει τον κατασκευαστή με τις επιλυμένες παραμέτρους.
Αυτή η διαδικασία είναι αναδρομική, δηλαδή εάν κάποιο από τα επιλυμένα αντικείμενα απαιτεί επίσης άλλα αντικείμενα, το MVVMCross θα επιλύσει και αυτά [1] [4].
Μύλη εγγραφή κατά σύμβαση
Το MVVMCROSS υποστηρίζει επίσης τη χύμα της καταχώρισης των τάξεων χρησιμοποιώντας αντανάκλαση. Αυτό γίνεται συνήθως στην κλάση `app`, η οποία κληρονομεί από το` mvxapplication '. Το πλαίσιο χρησιμοποιεί αντανάκλαση για να βρει όλες τις κατηγορίες στη συναρμολόγηση του πυρήνα που τελειώνει με την "υπηρεσία" και τις καταγράφει ως τεμπέλης singletons. Αυτό επιτυγχάνεται με τα παρακάτω βήματα:
1. Βρείτε μαθήματα που τελειώνουν με "Υπηρεσία": Η αντανάκλαση χρησιμοποιείται για να βρει όλες τις κατηγορίες με ονόματα που τελειώνουν στην "υπηρεσία" μέσα στη συναρμολόγηση του πυρήνα.
2. Προσδιορίστε τις διεπαφές: Για κάθε κλάση που βρέθηκε, το MVVMCROSS προσδιορίζει τις διεπαφές που υλοποιεί.
3. Εγγραφείτε ως τεμπέλης singletons: Αυτές οι τάξεις καταγράφονται στη συνέχεια ως τεμπέλης singletons ενάντια στις αντίστοιχες διεπαφές τους. Αυτό σημαίνει ότι δεν δημιουργούνται μέχρι να ζητηθούν για πρώτη φορά [2] [4] [7].
ViewModels και έγχυση εξάρτησης
Το MVVMCROSS χρησιμοποιεί τον ίδιο μηχανισμό έγχυσης κατασκευαστή για το ViewModels. Κατά τη δημιουργία ενός ViewModel, το MVVMCROSS επιλύει τυχόν εξαρτήσεις που καθορίζονται στον κατασκευαστή χρησιμοποιώντας το δοχείο ΔΟΕ. Αυτό επιτρέπει την εύκολη προσαρμογή των υπηρεσιών σε διαφορετικές πλατφόρμες και διευκολύνει τη δοκιμή μονάδων, επιτρέποντας τη χρήση ψεύτικων υλοποιήσεων [1] [4].
Προσαρμογή και appstart
Η κλάση `App` είναι υπεύθυνη για την καταχώριση προσαρμοσμένων αντικειμένων στο δοχείο της ΔΟΕ και την έναρξη των προβολών της εφαρμογής. Εάν χρειαστεί, μπορείτε να προσαρμόσετε τη διαδικασία εκκίνησης χρησιμοποιώντας μια προσαρμοσμένη κατηγορία AppStart 'για να αποφασίσετε ποιο ViewModel θα παρουσιάσει πρώτα [2] [7].
Συνοπτικά, το MVVMCROSS αξιοποιεί τον προβληματισμό για να αυτοματοποιήσει τη διαδικασία επίλυσης των εξαρτήσεων κατά τη διάρκεια της κατασκευής αντικειμένων, καθιστώντας ευκολότερη τη διαχείριση σύνθετων γραφημάτων αντικειμένων και την υποστήριξη της ανάπτυξης cross-platform με ελάχιστο κώδικα ειδικού για την πλατφόρμα.
Αναφορές:[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-ines
[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