MVVMCROSS intensywnie wykorzystuje odbicie podczas budowy obiektów, szczególnie poprzez inwersję kontenera sterowania (MKOl), którym zarządza instancja „Mvx.iocprovider` Singleton. Oto szczegółowy przegląd tego, jak MVVMCROSS obsługuje odbicie podczas budowy obiektu:
Constructor Inctection
MVVMCROSS obsługuje wtrysk konstruktora, który pozwala mu automatycznie rozwiązywać parametry podczas budowy obiektów za pomocą odbicia. Podczas tworzenia obiektu Mvvmcross wykonuje następujące kroki:
1. Refleksja do znalezienia konstruktora: MVVMCROSS używa odbicia do identyfikacji konstruktora utworzenia klas.
2. Rozdzielczość parametrów: bada parametry wymagane przez konstruktor i identyfikuje potrzebne interfejsy lub typy.
3. Rozwiązuj zarejestrowane implementacje: Dla każdego parametru MVVMCROSS używa `mvx.iocprovider.resolve ()` w celu uzyskania zarejestrowanej implementacji interfejsu lub typu.
4. Invoke Constructor: Po rozwiązaniu wszystkich parametrów MVVMCROSS używa odbicia do wywołania konstruktora z rozdzielonymi parametrami.
Proces ten jest rekurencyjny, co oznacza, że jeśli którykolwiek z rozwiązanych obiektów również wymaga innych obiektów, MVVMCROSS je również rozwiązuje [1] [4].
rejestracja luzem według konwencji
MVVMCROSS obsługuje również masową rejestrację klas za pomocą refleksji. Zazwyczaj odbywa się to w klasie „app”, która dziedziczy po „mvxapplication”. Framework wykorzystuje refleksję, aby znaleźć wszystkie klasy w podstawowym zgromadzeniu, które kończą się „Service” i rejestruje je jako leniwe singletony. Osiąga się to w następujących krokach:
1. Znajdź klasy kończące się na „Service”: Refleksja służy do znalezienia wszystkich klas o nazwach kończących się w „Service” w ramach podstawowego zespołu.
2. Zidentyfikuj interfejsy: Dla każdej znalezionej klasy MVVMCROSS identyfikuje implementowane interfejsy.
3. Zarejestruj się jako leniwe singletony: Te zajęcia są następnie rejestrowane jako leniwe singletony wbrew ich odpowiednim interfejsom. Oznacza to, że nie są utworzone, dopóki nie zostaną poproszone [2] [4] [7].
ViewModels i iniekcja zależności
MVVMCROSS wykorzystuje ten sam mechanizm iniekcji konstruktora dla ViewModels. Podczas tworzenia ViewModel MVVMCROSS rozwiązuje wszelkie zależności określone w konstruktorze za pomocą pojemnika MKOl. Umożliwia to łatwe dostosowywanie usług na różnych platformach i ułatwia testowanie jednostkowe, umożliwiając korzystanie z próbnych implementacji [1] [4].
Dostosowywanie i AppStart
Klasa „App” jest odpowiedzialna za rejestracja niestandardowych obiektów na kontenerze MKOC i uruchomienie ViewModels aplikacji. W razie potrzeby możesz dostosować proces uruchamiania za pomocą niestandardowej klasy `AppStart`, aby zdecydować, który ViewModel zaprezentuj najpierw [2] [7].
Podsumowując, MVVMCROSS wykorzystuje refleksję w celu zautomatyzowania procesu rozwiązywania zależności podczas budowy obiektów, ułatwiając zarządzanie złożonymi wykresami obiektowymi i obsługuje rozwój międzyplatformowy za pomocą minimalnego kodu specyficznego dla platformy.
Cytaty:[1] https://www.mvvmcross.com/documentation/fundamentals/dependency Inction
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross handbook/using-mvvmcross-to-create-liurst-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/introdukcja-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-andetup