Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jak MVVMCross zpracovává odraz během konstrukce objektů


Jak MVVMCross zpracovává odraz během konstrukce objektů


MVVMCross využívá odraz rozsáhle během konstrukce objektů, zejména prostřednictvím jeho inverze kontrolního (IOC) kontejneru, který je spravován instancí singletonu `mvx.iocProvider`. Zde je podrobný přehled o tom, jak MVVMCross zpracovává odraz během konstrukce objektů:

Injekce konstruktéra

MVVMCross podporuje injekci konstruktéru, která mu umožňuje automaticky řešit parametry během konstrukce objektu pomocí odrazu. Při vytváření objektu provádí MVVMCross následující kroky:

1. Reflexe pro nalezení konstruktoru: MVVMCross používá odraz k identifikaci konstruktoru instance třídy.
2. Rozlišení parametrů: Zkoumá parametry požadované konstruktorem a identifikuje potřebná rozhraní nebo typy.
3. Registrované implementace Resolte: Pro každý parametr používá MVVMCross `mvx.iocprovider.resolve ()` k získání registrované implementace pro rozhraní nebo typ.
4. Invoke Constructor: Jakmile jsou všechny parametry vyřešeny, MVVMCross použije odraz k vyvolání konstruktoru pomocí vyřešených parametrů.

Tento proces je rekurzivní, což znamená, že pokud některý z vyřešených objektů vyžaduje také jiné objekty, MVVMCross je také vyřeší [1] [4].

Obrovská registrace podle úmluvy

MVVMCross také podporuje hromadnou registraci tříd pomocí reflexe. To se obvykle provádí ve třídě `app`, která zdědí od` mvxApplication`. Rámec používá reflexi k nalezení všech tříd v jádru, které končí „službou“, a registruje je jako líné singletony. Toho je dosaženo prostřednictvím následujících kroků:

1. Najděte třídy končící „Service“: Reflexe se používá k nalezení všech tříd se jmény končícími „službou“ v základní sestavě.
2. Identifikujte rozhraní: Pro každou nalezenou třídu MVVMCross identifikuje rozhraní, která implementuje.
3. Zaregistrujte se jako líné singletony: Tyto třídy jsou poté zaregistrovány jako líné singletony proti jejich příslušným rozhraním. To znamená, že nejsou omezeny, dokud nejsou poprvé požadovány [2] [4] [7].

ViewModels and Dependence Injection

MVVMCross používá stejný injekční mechanismus konstruktéru pro viewmodels. Při vytváření ViewModel řeší MVVMCross veškeré závislosti uvedené v konstruktoru pomocí kontejneru IOC. To umožňuje snadné přizpůsobení služeb na různých platformách a usnadňuje testování jednotek umožněním použití falešných implementací [1] [4].

Přizpůsobení a AppStart

Třída „App` je zodpovědná za registraci vlastních objektů na kontejneru IOC a založení zobrazení aplikace. V případě potřeby můžete proces spuštění přizpůsobit pomocí vlastní třídy „AppStart“, který rozhodne, která ViewModel pro první [2] [7].

Stručně řečeno, MVVMCross využívá odraz a automatizuje proces řešení závislostí během konstrukce objektů, což usnadňuje správu složitých grafů objektů a podporuje vývoj napříč platformami s minimálním kódem specifickým pro platformu.

Citace:
[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-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