Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan håndterer MVVMCross refleksion under objektkonstruktion


Hvordan håndterer MVVMCross refleksion under objektkonstruktion


MVVMCROSS bruger reflektion i vid udstrækning under objektkonstruktion, især gennem dens inversion af kontrol (IOC) container, som administreres af `mvx.iocprovider` singleton -instansen. Her er en detaljeret oversigt over, hvordan MVVMCross håndterer refleksion under objektkonstruktion:

Konstruktørinjektion

MVVMCROSS understøtter konstruktørinjektion, som giver den mulighed for automatisk at løse parametre under objektkonstruktion ved hjælp af reflektion. Når du opretter et objekt, udfører MVVMCROSS følgende trin:

1. refleksion for at finde konstruktøren: MVVMCross bruger refleksion til at identificere konstruktøren af ​​klassen, der er instantieret.
2. Parameteropløsning: Den undersøger de parametre, der kræves af konstruktøren, og identificerer de nødvendige grænseflader eller typer.
3. Løs registrerede implementeringer: For hver parameter bruger MVVMCross `mvx.iocprovider.resolve ()` til at opnå den registrerede implementering til grænsefladen eller typen.
4. påkald konstruktør: Når alle parametre er løst, bruger MVVMCross refleksion til at påkalde konstruktøren med de opløste parametre.

Denne proces er rekursiv, hvilket betyder, at hvis nogen af ​​de opløste objekter også kræver andre objekter, vil MVVMCross også løse dem [1] [4].

Bulk -registrering efter konvention

MVVMCROSS understøtter også bulkregistrering af klasser ved hjælp af refleksion. Dette gøres typisk i klassen `app`, der arver fra` MVXApplication '. Rammerne bruger refleksion for at finde alle klasser i kerneforsamlingen, der ender med "service" og registrerer dem som dovne singletons. Dette opnås gennem følgende trin:

1. Find klasser, der slutter med "service": Refleksion bruges til at finde alle klasser med navne, der slutter på "service" inden for kerneenheden.
2. Identificer grænseflader: For hver fundne klasse identificerer MVVMCROSS de grænseflader, den implementerer.
3. Registrer som dovne singletons: Disse klasser registreres derefter som dovne singletoner mod deres respektive grænseflader. Dette betyder, at de ikke bliver instantieret, før de først anmodes om [2] [4] [7].

ViewModels og afhængighedsinjektion

MVVMCROSS bruger den samme konstruktørinjektionsmekanisme til ViewModels. Når man opretter en ViewModel, løser MVVMCROSS alle afhængigheder, der er specificeret i konstruktøren ved hjælp af IOC -beholderen. Dette muliggør let tilpasning af tjenester på tværs af forskellige platforme og letter enhedstest ved at muliggøre brugen af ​​mockimplementeringer [1] [4].

Tilpasning og AppStart

Klassen `app` er ansvarlig for at registrere brugerdefinerede objekter på IOC -beholderen og starte applikationens ViewModels. Hvis det er nødvendigt, kan du tilpasse opstartprocessen ved at bruge en brugerdefineret `AppStart` -klasse til at beslutte, hvilken ViewModel der skal præsenteres først [2] [7].

Sammenfattende udnytter MVVMCROSS refleksion for at automatisere processen med at løse afhængigheder under objektkonstruktion, hvilket gør det lettere at styre komplekse objektgrafer og understøtte tværplatformudvikling med minimal platformspecifik kode.

Citater:
[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/
[3] http://wojosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduktion-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-thone-build-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-sising-app-and-setup