Použití Microsoft.Extensions.DependenceInjection s MVVMCross může představovat několik výzev a známých problémů:
1. Nekompatibilita s procesem spuštění MVVMCross: MVVMCross vyžaduje schopnost rozlišit komponenty částečně prostřednictvím procesu nastavení a poté pokračovat v registraci více komponent. Microsoft.Extensions.DependenceInjection (MSS.DI) však vyžaduje, aby byly všechny komponenty zaregistrovány před voláním `.Build ()` na sbírce služeb. Tento základní rozdíl způsobuje, že tyto dva systémy nekompatibilní bez dalších řešení, jako jsou ruční překládání služeb z jednoho kontejneru do druhého [1].
2. Dvoustupňový proces spuštění: Pro využití MVVMCross využívat vývojáři často vytvářejí sbírku služeb MS.DI a poté překládají své služby do instance mvvmcross `imvxiocprovider`. Tento přístup zavádí dvoustupňový proces spouštění, který může být těžkopádný a může vést k další složitosti a možným problémům [1].
3. Omezení injekce závislosti: kontejner IOC MVVMCross zachází s aspektem singletonu na úrovni rozhraní, nikoli na instanci. To znamená, že pokud třída implementuje více rozhraní, může MVVMCross vytvořit samostatné instance pro každé rozhraní, pokud není výslovně spravováno [4]. I když to přímo nesouvisí s MS.DI, zdůrazňuje potřebu pečlivého řízení při integraci různých systémů injekce závislosti.
4. Problémy s upgradem a kompatibilitou: Upgradování verzí MVVMCross může někdy zavést problémy s injekcí závislosti, zejména při používání modelů základního pohledu. Například změny v logice výběru konstruktéru mezi verzemi mohou ovlivnit to, jak jsou závislosti injikovány [2].
K překonání těchto výzev se vývojáři často rozhodnou posílit funkčnost MVVMCrossu, aniž by nahradili jeho základní kontejner IOC. To umožňuje použití dalších rámců injekce závislosti, jako je MS.DI, spolu s MVVMCross, což poskytuje flexibilitu při výběru poskytovatele IOC [1] [5]. To však vyžaduje pečlivé nastavení a řízení, aby se zabránilo konfliktům a zajistilo bezproblémovou integraci.
Stručně řečeno, při použití Microsoft.Extensions.DependenceInjection s MVVMCross je možné, vyžaduje pečlivé zvážení procesu spuštění, potenciální neslučitelnosti a pečlivé řízení závislostí, aby se zabránilo známým problémům.
Citace:[1] https://github.com/mvvmcross/mvvmcross/issues/4436
[2] https://github.com/mvvmcross/mvvmcross/issues/4183
[3] https://docs.particular.net/nservicebus/dependency-injection/Extensions-dependencyInjection
[4] https://stackoverflow.com/questions/23700121/possible-bug-with-dependent-injection-on-mvvmcross
[5] https://github.com/mvvmcross/mvvmcross/issues/3804
[6] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[7] https://msicc.net/using-microsofts-extensions-dependenceInjection-package-in-xamarin-forms-mvvm-part-2/-2/-2/
[8] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection