Використання Microsoft.extensions.ependencyIncection з MVVMcross може представити кілька проблем та відомих питань:
1. Несумісність із процесом запуску MVVMCross: MVVMCross вимагає можливості вирішувати компоненти частково через процес налаштування, а потім продовжувати реєструвати більше компонентів. Однак Microsoft.extensions.ependencyInjection (ms.di) вимагає реєстрації всіх компонентів, перш ніж зателефонувати `.build ()` на колекції послуг. Ця фундаментальна різниця робить дві системи несумісними без додаткових обхідних шляхів, таких як вручну переклад послуг з одного контейнера в інший [1].
2. Двоступеневий процес запуску: Для використання MS.DI з MVVMcross розробники часто будують колекцію послуг Ms.Di, а потім перекладають свої послуги в екземпляр MVVMCROSS `imvxiocProvider`. Цей підхід вводить двоступеневий процес запуску, який може бути громіздким і може призвести до додаткової складності та потенційних питань [1].
3. Обмеження впорскування залежності: контейнер MVVMCross IOC лікує синглтонський аспект на рівні інтерфейсу, а не на інстанційний тип. Це означає, що якщо клас реалізує кілька інтерфейсів, MVVMCross може створити окремі екземпляри для кожного інтерфейсу, якщо явно не керується [4]. Хоча це безпосередньо не пов'язане з MS.DI, він підкреслює необхідність ретельного управління при інтеграції різних систем вприскування залежності.
. Наприклад, зміни логіки вибору конструктора між версіями можуть вплинути на те, як вводять залежності [2].
Щоб подолати ці виклики, розробники часто вибирають для посилення функціональності MVVMcross без заміни його основного контейнера IOC. Це дозволяє використовувати додаткові рамки для введення залежності, такі як MS.DI поряд з MVVMCross, забезпечуючи гнучкість у виборі постачальника IOC [1] [5]. Однак це вимагає ретельного налаштування та управління, щоб уникнути конфліктів та забезпечити безперебійну інтеграцію.
Підводячи підсумок, використовуючи можливе Microsoft.extensions.ependencyInjection з MVVMCross, вона вимагає ретельного розгляду процесу запуску, потенційних несумісності та ретельного управління залежністю, щоб уникнути відомих проблем.
Цитати:[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-dependency-injecton-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-dependencyinjection-package-in-xamarin-forms-mvvm-applications-part-2/
[8] https://www.mvvmcross.com/documentation/fundamentals/dependency-incection