Výměna výchozího kontejneru IOC v MVVMCross může představit několik běžných problémů, především kvůli způsobu, jakým se MVVMCross integruje do vestavěné kontejneru IOC. Zde jsou některé z výzev, se kterými se můžete setkat:
1. registrace a synchronizace služeb **
Jedním z hlavních problémů je zajistit, aby byly zaregistrovány všechny nezbytné služby a aby „iServiceProvider“ zůstal synchronizován s „iServiceCollection“. MVVMCross pokračuje v registru svých vlastních služeb po počátečním nastavení, což může vést k nesrovnalostem, pokud nebude správně zpracováno. To vyžaduje aktualizaci poskytovatele při každé registraci sbírky, což může ovlivnit výkon [1].2. chybějící služby mvvmcross **
MVVMCross se spoléhá na několik vestavěných služeb, jako je „IMVXLoggerProvider“, „IMVXSettings“ a „IMVXSTART“. Při výměně kontejneru IOC nemusí být tyto služby automaticky registrovány, což vede k selhání spuštění. Musíte tyto služby ručně zaregistrovat nebo najít způsob, jak nechat MVVMCross zpracovat svou registraci ve vašem vlastním kontejneru [1].3..
MVVMCross používá zpětné volání, když jsou služby registrovány, což může být obtížné zpracovat v vlastním adaptéru IOC. Kromě toho může řízení života (např. Singleton, přechodné) vyžadovat vlastní implementaci, aby odpovídala očekáváním MVVMCrossu [4].4. integrace s knihovnami třetích stran **
Použití jiného kontejneru IOC, jako je .NET Core's DI, umožňuje snadnější integraci s knihovnami třetích stran, které poskytují metody rozšíření pro registraci (např. „IHTTPClientFactory`,` Polly`, `Automaticpper`). Zajištění toho, aby tyto knihovny fungovaly hladce s vlastním nastavením MVVMCross, však může být náročné [1].5. Úvahy o výkonu **
Vytváření nové instance `iServiceProvider` pokaždé, když jsou služby zaregistrovány, může vést k problémům s výkonem. Je tomu tak proto, že „BuildServiceProvider ()“ se nazývá opakovaně, což může být nákladné z hlediska zdrojů a času [1].6. Přizpůsobení a přepsání **
Chcete -li plně nahradit výchozí kontejner IOC, musíte ve své třídě nastavení přepsat metodu „createiocProvider“. To vyžaduje vytvoření adaptéru, který mapuje vaši vlastní implementaci IOC na rozhraní MVVMCross IMVXIOCProvider`. Tento proces může být složitý a vyžaduje pečlivé řešení specifických požadavků MVVMCrossu [4].7. Úvahy specifické pro platformu **
Při práci s platformami, jako je Xamarin, mohou vzniknout další úvahy v důsledku konkrétních procesů nastavení a inicializace těchto prostředí. Například zajištění toho, aby byly služby specifické pro Android správně registrovány a vyřešeny [10].Stručně řečeno, nahrazení výchozího kontejneru IOC v MVVMCrossu zahrnuje řešení registrace služeb, synchronizaci, chybějící služby, správu celoživotních, integrace s knihovnami třetích stran, optimalizaci výkonu a úvahy specifické pro platformu. Každá z těchto oblastí vyžaduje pečlivé zacházení, aby se zajistilo hladký přechod a správnou funkčnost aplikace.
Citace:[1] https://stackoverflow.com/questions/64478974/Replace-default-ioc-container-in-mvvmcross
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-Handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-core-project/Adding-app-class
[3] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[4] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[5] https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/february/mvvm-ioc-containers-and-mvvm
[6] https://docs.spring.io/spring-framework/docs/4.3.9.release/spring-framework-reference/html/beans.html
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/tutorials/tipcalc/the-core-project
[9] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[10] https://stackoverflow.com/questions/53752857/xamarin-android-pecific-ioc-in-mvvmcross-constructor-issue/53761392