Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan håndterer mvvmcross refleksjon under objektkonstruksjon


Hvordan håndterer mvvmcross refleksjon under objektkonstruksjon


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