Заміна контейнера IOC за замовчуванням у MVVMCross може ввести кілька поширених проблем, насамперед завдяки тому, як MVVMCross інтегрується з вбудованим контейнером МОК. Ось деякі проблеми, з якими ви можете зіткнутися:
1. Реєстрація та синхронізація служби **
Одне з головних питань - це забезпечення реєстрації всіх необхідних послуг і що `iserviceprovider 'залишається синхронізованим з` iservicecollection`. MVVMCross продовжує реєструвати власні послуги після початкової установки, що може призвести до невідповідностей, якщо не впоратися належним чином. Це вимагає оновлення постачальника при кожній реєстрації колекцій, що може вплинути на ефективність [1].2. Відсутні послуги Mvvmcross **
MVVMcross покладається на кілька вбудованих послуг, таких як `imvxloggerProvider`,` imvxsettings` та `imvxstart`, серед інших. Замінивши контейнер МОК, ці послуги можуть не бути автоматично зареєстровані, що призводить до збоїв запуску. Вам потрібно вручну зареєструвати ці послуги або знайти спосіб дозволити mvvmcross обробляти свою реєстрацію у вашому спеціальному контейнері [1].3.
MVVMCross використовує зворотні дзвінки, коли зареєстровані служби, що може бути складним для обробки у користувальницькому адаптері IOC. Крім того, управління терміном експлуатації (наприклад, синглтон, перехідне) може вимагати власної реалізації, щоб відповідати очікуванням MVVMcross [4].4. Інтеграція з сторонніми бібліотеками **
Використання іншого контейнера IOC, наприклад .NET Core's DI, дозволяє полегшити інтеграцію з сторонніми бібліотеками, які забезпечують методи розширення для реєстрації (наприклад, `ihttpclientFactory`,` polly`, `automapper`). Однак забезпечення цих бібліотек безперешкодно працювати з спеціальним налаштуванням MVVMcross може бути складним [1].5. Міркування щодо ефективності **
Створення нового екземпляра `iserviceProvider` щоразу, коли зареєстровані послуги, може призвести до проблем з ефективністю. Це пояснюється тим, що `buildserviceprovider ()` називається неодноразово, що може бути дорогим з точки зору ресурсів та часу [1].6. Налаштування та переважання **
Щоб повністю замінити контейнер IOC за замовчуванням, вам потрібно перекрити метод `createiocprovider` у вашому класі налаштування. Це вимагає створення адаптера, який відображає вашу спеціальну реалізацію IOC на інтерфейс `imvxiocprovider 'Mvvmcross. Цей процес може бути складним і вимагає ретельного поводження з конкретними вимогами MVVMcross [4].7. Специфічні для платформи міркування **
Працюючи з такими платформами, як Xamarin, можуть виникати додаткові міркування через конкретні процеси налаштування та ініціалізації цих середовищ. Наприклад, гарантуючи, що послуги, що стосуються Android, належним чином зареєстровані та вирішені [10].Підводячи підсумок, заміна контейнера IOC за замовчуванням у MVVMcross передбачає вирішення реєстрації служб, синхронізації, відсутніх послуг, управління терміном життя, інтеграції з сторонніми бібліотеками, оптимізацією продуктивності та специфічними для платформи міркуваннями. Кожна з цих областей вимагає ретельної обробки, щоб забезпечити плавний перехід та належну функціональність програми.
Цитати:[1] https://stackoverflow.com/questions/64478974/replace-default-ioc-container-in-mvvmcross
[2.
[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/tutoriors/tipcalc/the-core-project
[9] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[10] https://stackoverflow.com/questions/53752857/xamarin-android-scific-ioc-in-mvvmcross-constructor-issue/53761392