Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jak refleksja MVVMCROSS podczas budowy obiektów


Jak refleksja MVVMCROSS podczas budowy obiektów


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