MVVMCROSS bruker refleksjon mye under objektkonstruksjon, spesielt gjennom sin inversjon av kontroll (IOC) -beholderen, som administreres av `mvx.iocprovider` singleton -forekomsten. Her er en detaljert oversikt over hvordan MVVMCROSS håndterer refleksjon under objektkonstruksjon:
Konstruktørinjeksjon
MVVMCROSS støtter konstruktørinjeksjon, som lar den automatisk løse parametere under objektkonstruksjon ved bruk av refleksjon. Når du oppretter et objekt, utfører MVVMCROSS følgende trinn:
1. Refleksjon for å finne konstruktøren: MVVMCROSS bruker refleksjon for å identifisere konstruktøren av klassen som blir instantiert.
2. Parameteroppløsning: Den undersøker parametrene som kreves av konstruktøren og identifiserer grensesnittene eller typene som trengs.
3. Løs registrerte implementeringer: For hver parameter bruker MVVMCROSS `MVX.IOCPROVIDER.RESOLV ()` For å få den registrerte implementeringen for grensesnittet eller typen.
4. Invoke Constructor: Når alle parametere er løst, bruker MVVMCROSS refleksjon for å påkalle konstruktøren med de løste parametrene.
Denne prosessen er rekursiv, noe som betyr at hvis noen av de løste objektene også krever andre objekter, vil MVVMCROSS løse dem også [1] [4].
Bulkregistrering etter konvensjon
MVVMCROSS støtter også bulkregistrering av klasser ved bruk av refleksjon. Dette gjøres vanligvis i `App` -klassen, som arver fra` mvxApplication`. Rammeverket bruker refleksjon for å finne alle klasser i kjernesamlingen som ender med "tjeneste" og registrerer dem som late singletons. Dette oppnås gjennom følgende trinn:
1. Finn klasser som slutter med "Service": Refleksjon brukes til å finne alle klasser med navn som slutter på "Service" innenfor kjernesamlingen.
2. Identifiser grensesnitt: For hver klasse som er funnet, identifiserer MVVMCROSS grensesnittene den implementerer.
3. Registrer deg som late singletoner: Disse klassene blir deretter registrert som late singletoner mot deres respektive grensesnitt. Dette betyr at de ikke blir instantiert før de først blir bedt om [2] [4] [7].
ViewModels and Dependency Injection
MVVMCROSS bruker den samme konstruktørinjeksjonsmekanismen for ViewModels. Når du oppretter en ViewModel, løser MVVMCROSS eventuelle avhengigheter som er spesifisert i konstruktøren ved hjelp av IOC -beholderen. Dette muliggjør enkel tilpasning av tjenester på tvers av forskjellige plattformer og letter enhetstesting ved å aktivere bruk av spotte implementeringer [1] [4].
Tilpasning og appstart
`App` -klassen er ansvarlig for å registrere tilpassede objekter på IOC -beholderen og starte applikasjonens ViewModels. Om nødvendig kan du tilpasse oppstartsprosessen ved å bruke en tilpasset `AppStart` -klasse for å bestemme hvilken ViewModel som skal presentere først [2] [7].
Oppsummert utnytter MVVMCROSS refleksjon for å automatisere prosessen med å løse avhengigheter under objektkonstruksjon, noe som gjør det lettere å administrere komplekse objektgrafer og støtte tverrplattformutvikling med minimal plattformspesifikk kode.
Sitasjoner:[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-irst-xamarin-app/creating-the-core-project/adding-an-app-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-tensions
[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-tone-build-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-using-apps-app-and-setup