MVVMCross nutzt Reflexion während der Objektkonstruktion ausgiebig, insbesondere durch seine IC -Container (Inversion of Control), die von der Singleton -Instanz von "mvx.iocProvider" verwaltet wird. Hier finden Sie einen detaillierten Überblick darüber, wie mvvmcross die Reflexion während der Objektkonstruktion verarbeitet:
Konstruktorinjektion
MVVMCross unterstützt die Konstruktorinjektion, mit der sie die Parameter während der Objektkonstruktion mithilfe der Reflexion automatisch auflösen können. Beim Erstellen eines Objekts führt MVVMCross die folgenden Schritte aus:
1. Reflexion Um den Konstruktor zu finden: Mvvmcross verwendet Reflexion, um den Konstruktor der zu instanziierten Klasse zu identifizieren.
2. Parameterauflösung: Es untersucht die vom Konstruktor erforderlichen Parameter und identifiziert die erforderlichen Schnittstellen oder Typen.
3.. Auflösen registrierten Implementierungen: Für jeden Parameter verwendet Mvvmcross `mvx.iocprovider.resolve ()`, um die registrierte Implementierung für die Schnittstelle oder den Typ zu erhalten.
4. Invoke Constructor: Sobald alle Parameter aufgelöst sind, verwendet MVVMCross Reflexion, um den Konstruktor mit den aufgelösten Parametern aufzurufen.
Dieser Vorgang ist rekursiv, was bedeutet, dass MVVMCROSS auch diejenigen aufgelöst werden, die auch andere Objekte erfordern, diese auch diese auflösen [1] [4].
Massenregistrierung nach Konvention
MVVMCross unterstützt auch die Massenregistrierung von Klassen mithilfe von Reflexion. Dies erfolgt normalerweise in der "App" -Klasse, die von "mvxApplication" erbt. Das Framework verwendet Reflexion, um alle Klassen in der Kernbaugruppe zu finden, die mit "Service" enden, und registriert sie als faule Singletons. Dies wird durch die folgenden Schritte erreicht:
1. Finden Sie Klassen, die mit "Service" enden: Reflection wird verwendet, um alle Klassen mit Namen zu finden, die im "Service" innerhalb der Kernbaugruppe enden.
2. Identifizieren Sie Schnittstellen: Für jede gefundene Klasse identifiziert Mvvmcross die von ihm implementierenden Schnittstellen.
3. Registrieren Sie sich als faule Singletons: Diese Klassen werden dann als faule Singletons gegen ihre jeweiligen Schnittstellen registriert. Dies bedeutet, dass sie erst so instanziiert sind, dass sie zum ersten Mal angefordert werden [2] [4] [7].
ViewModels und Abhängigkeitsinjektion
MVVMCross verwendet den gleichen Konstruktorinjektionsmechanismus für ViewModels. Beim Erstellen eines ViewModel löst MVVMCross alle im Konstruktor angegebenen Abhängigkeiten mit dem IOC -Container auf. Dies ermöglicht eine einfache Anpassung von Diensten über verschiedene Plattformen hinweg und erleichtert die Unit -Tests, indem die Verwendung von Mock -Implementierungen aktiviert wird [1] [4].
Anpassung und Appstart
Die "App" -Klasse ist dafür verantwortlich, benutzerdefinierte Objekte im IOC -Container zu registrieren und die ViewModels der Anwendung zu starten. Bei Bedarf können Sie den Startprozess anpassen, indem Sie eine benutzerdefinierte "Appstart" -Klasse verwenden, um zu entscheiden, welches ViewModel zuerst vorgestellt werden soll [2] [7].
Zusammenfassend nutzt MVVMCross die Reflexion, um den Prozess der Auflösung von Abhängigkeiten während der Objektkonstruktion zu automatisieren, wodurch die Verwaltung komplexer Objektdiagramme und die Unterstützung der plattformübergreifenden Entwicklung mit minimaler plattformspezifischer Code einfacher wird.
Zitate:[1] https://www.mvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvmcross-handbook/using-mvmcross-to-create-your-first-xamarin-app/creating-the-core-project/adding-an-app-class
[3] http://wojosoftware.com/software/mvmcross/
[4] https://www.mvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeprroject.com/articles/863695/Introduction-to-mvmcross-platform
[6] https://github.com/media-tools/sqlite-net-textessions
[7] https://www.mvmcross.com/documentation/getting-started/mvmcross-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-mvm-apps-apps-pith-xamarin-and-mvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-Setup