باستخدام Microsoft.Extensions.DependencyInjection مع MVVMCROSS يمكن أن يمثل العديد من التحديات والقضايا المعروفة:
1. عدم التوافق مع عملية بدء تشغيل MVVMCROSS: يتطلب MVVMCROSS القدرة على حل المكونات جزءًا من خلال عملية الإعداد ثم متابعة تسجيل المزيد من المكونات. ومع ذلك ، يتطلب Microsoft.Extensions.DependencyInjection (MS.DI) أن يتم تسجيل جميع المكونات قبل استدعاء `.build ()` على مجموعة الخدمة. هذا الاختلاف الأساسي يجعل النظامين غير متوافقان دون حلول إضافية ، مثل ترجمة الخدمات يدويًا من حاوية إلى أخرى [1].
2. عملية بدء التشغيل على مرحلتين: للاستفادة من Ms.Di مع MVVMcross ، غالبًا ما يقوم المطورون ببناء مجموعة من خدمة MS.DI ثم يترجمون خدماتها إلى مثيل MVVMcross `imvxiocprovider`. يقدم هذا النهج عملية بدء تشغيل على مرحلتين ، والتي يمكن أن تكون مرهقة وقد تؤدي إلى تعقيد إضافي وقضايا محتملة [1].
3. قيود حقن التبعية: تعامل حاوية IOC الخاصة بـ MVVMCROSS مع جانب Singleton على مستوى الواجهة ، وليس النوع الذي تم تأسيسه. هذا يعني أنه إذا كان الفصل يطبق واجهات متعددة ، فقد يقوم MVVMCROSS بإنشاء مثيلات منفصلة لكل واجهة ما لم تتم إدارتها بشكل صريح [4]. على الرغم من أن هذا لا يرتبط بشكل مباشر بالسيدة ، إلا أنه يسلط الضوء على الحاجة إلى إدارة دقيقة عند دمج أنظمة حقن التبعية المختلفة.
4. مشكلات الترقية والتوافق: يمكن أن تؤدي ترقية إصدارات MVVMCROSS في بعض الأحيان إلى إدخال مشكلات مع حقن التبعية ، خاصة عند استخدام نماذج العرض الأساسية. على سبيل المثال ، قد تؤثر التغييرات في منطق اختيار المنشئ بين الإصدارات على كيفية حقن التبعيات [2].
للتغلب على هذه التحديات ، غالبًا ما يختار المطورون تعزيز وظائف MVVMCross دون استبدال حاوية IOC الأساسية. هذا يسمح باستخدام أطر عمل حقن التبعية الإضافية مثل MS.DI إلى جانب MVVMCROSS ، مما يوفر المرونة في اختيار مزود اللجنة الأولمبية الدولية [1] [5]. ومع ذلك ، فإن هذا يتطلب الإعداد والإدارة الدقيقة لتجنب النزاعات وضمان تكامل سلس.
باختصار ، أثناء استخدام Microsoft.Extensions.DependencyInjection مع 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 injection-on-mvvmcross
[5] https://github.com/mvvmcross/mvvmcross/issues/3804
[6] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[7]
[8] https://www.mvvmcross.com/documentation/fundamentals/dependency injection