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