Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Bagaimana refleksi menangani mvvmcross selama konstruksi objek


Bagaimana refleksi menangani mvvmcross selama konstruksi objek


MVVMCross menggunakan refleksi secara luas selama konstruksi objek, terutama melalui wadah inversi kontrol (IOC), yang dikelola oleh instance `mvx.iocprovider` singleton. Berikut gambaran terperinci tentang bagaimana MVVMCross menangani refleksi selama konstruksi objek:

Injeksi Konstruktor

MVVMCross mendukung injeksi konstruktor, yang memungkinkannya untuk secara otomatis menyelesaikan parameter selama konstruksi objek menggunakan refleksi. Saat membuat objek, MVVMCross melakukan langkah -langkah berikut:

1. Refleksi untuk menemukan konstruktor: mvvmcross menggunakan refleksi untuk mengidentifikasi konstruktor kelas yang sedang dipakai.
2. Resolusi Parameter: Ini memeriksa parameter yang dibutuhkan oleh konstruktor dan mengidentifikasi antarmuka atau jenis yang diperlukan.
3. Resol Implementasi Terdaftar: Untuk setiap parameter, MVVMCross menggunakan `mvx.iocprovider.resolve ()` untuk mendapatkan implementasi terdaftar untuk antarmuka atau jenis.
4. Invoke Constructor: Setelah semua parameter diselesaikan, MVVMCross menggunakan refleksi untuk memohon konstruktor dengan parameter yang diselesaikan.

Proses ini bersifat rekursif, artinya jika salah satu objek yang diselesaikan juga memerlukan objek lain, MVVMCross akan menyelesaikannya juga [1] [4].

Pendaftaran Massal berdasarkan Konvensi

MVVMCross juga mendukung pendaftaran massal kelas menggunakan refleksi. Ini biasanya dilakukan di kelas `app`, yang mewarisi dari` mvxapplication`. Kerangka kerja menggunakan refleksi untuk menemukan semua kelas dalam perakitan inti yang diakhiri dengan "layanan" dan mendaftarkannya sebagai singleton malas. Ini dicapai melalui langkah -langkah berikut:

1. Temukan kelas yang diakhiri dengan "Layanan": Refleksi digunakan untuk menemukan semua kelas dengan nama yang diakhiri dengan "Layanan" dalam perakitan inti.
2. Identifikasi Antarmuka: Untuk setiap kelas yang ditemukan, MVVMCross mengidentifikasi antarmuka yang diterapkannya.
3. Daftar sebagai Lazy Singletons: Kelas -kelas ini kemudian didaftarkan sebagai singleton malas terhadap antarmuka masing -masing. Ini berarti mereka tidak dipakai sampai mereka pertama kali diminta [2] [4] [7].

viewmodels dan injeksi ketergantungan

MVVMCross menggunakan mekanisme injeksi konstruktor yang sama untuk viewmodels. Saat membuat ViewModel, MVVMCross menyelesaikan ketergantungan yang ditentukan dalam konstruktor menggunakan wadah IOC. Hal ini memungkinkan penyesuaian layanan yang mudah di berbagai platform dan memfasilitasi pengujian unit dengan memungkinkan penggunaan implementasi tiruan [1] [4].

Kustomisasi dan AppStart

Kelas `app` bertanggung jawab untuk mendaftarkan objek khusus pada wadah IOC dan memulai viewmodels aplikasi. Jika diperlukan, Anda dapat menyesuaikan proses startup dengan menggunakan kelas `AppStart` khusus untuk memutuskan ViewModel mana yang akan disajikan terlebih dahulu [2] [7].

Singkatnya, MVVMCross memanfaatkan refleksi untuk mengotomatisasi proses penyelesaian dependensi selama konstruksi objek, membuatnya lebih mudah untuk mengelola grafik objek yang kompleks dan mendukung pengembangan lintas-platform dengan kode spesifik platform minimal.

Kutipan:
[1] https://www.mvmcross.com/documentation/fundamentals/dependency-clependency
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-core-project/adding-an-papp-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.mvmcross.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