يستخدم MVVMCross الانعكاس على نطاق واسع أثناء بناء الكائنات ، وخاصة من خلال انقلابها في حاوية التحكم (IOC) ، والتي تتم إدارتها بواسطة مثيل Singleton Mvx.iocprovider` فيما يلي نظرة عامة مفصلة على كيفية تعامل MVVMcross مع الانعكاس أثناء بناء الكائن:
حقن المنشئ
يدعم MVVMCross حقن المنشئ ، والذي يسمح له بحل المعلمات تلقائيًا أثناء بناء الكائن باستخدام الانعكاس. عند إنشاء كائن ، يقوم MVVMcross بتنفيذ الخطوات التالية:
1. الانعكاس للعثور على المُنشئ: يستخدم MVVMCROSS انعكاسًا لتحديد مُنشئ الفئة التي يتم إنشاء مثيل لها.
2. دقة المعلمة: يفحص المعلمات المطلوبة من قبل المنشئ ويحدد الواجهات أو الأنواع اللازمة.
3. حل التطبيقات المسجلة: لكل معلمة ، يستخدم MVVMCross `mvx.iocprovider.resolve ()` للحصول على التنفيذ المسجل للواجهة أو النوع.
4. استدعاء مُنشئ: بمجرد حل جميع المعلمات ، يستخدم MVVMCross انعكاسًا لاستدعاء المُنشئ بالمعلمات التي تم حلها.
هذه العملية متكررة ، وهذا يعني إذا كان أي من الكائنات التي تم حلها تتطلب أيضًا كائنات أخرى ، فإن MVVMcross ستحلها أيضًا [1] [4].
التسجيل بالجملة حسب الاتفاقية
يدعم MVVMCROSS أيضًا التسجيل بالجملة للفئات باستخدام الانعكاس. يتم ذلك عادة في فئة "التطبيق" ، والتي ترث من "MVXAPPLICATION". يستخدم الإطار انعكاسًا لإيجاد جميع الفصول في التجميع الأساسي الذي ينتهي بـ "الخدمة" ويسجلها على أنها مفردة كسول. يتم تحقيق ذلك من خلال الخطوات التالية:
1. ابحث عن الفصول التي تنتهي بـ "الخدمة": يتم استخدام الانعكاس للعثور على جميع الفئات مع أسماء تنتهي في "الخدمة" داخل التجميع الأساسي.
2. تحديد الواجهات: لكل فئة موجودة ، يحدد MVVMCROSS الواجهات التي تنفذها.
3. سجل كمسندات كسول: ثم يتم تسجيل هذه الفصول كأغنية كسول ضد واجهاتها. هذا يعني أنهم لم يتم إنشاء مثيل له حتى يتم طلبهم لأول مرة [2] [4] [7].
ViewModels وحقن التبعية
يستخدم MVVMCROSS نفس آلية حقن المنشئ لأرضيات VINEMODELS. عند إنشاء ViewModel ، يحل MVVMcross أي تبعيات محددة في المنشئ باستخدام حاوية IOC. يتيح ذلك تخصيصًا سهلاً للخدمات عبر منصات مختلفة ويسهل اختبار الوحدة من خلال تمكين استخدام تطبيقات وهمية [1] [4].
التخصيص و AppStart
فئة "التطبيق" مسؤولة عن تسجيل كائنات مخصصة على حاوية IOC وبدء تشغيل Application ViewModels. إذا لزم الأمر ، يمكنك تخصيص عملية بدء التشغيل باستخدام فئة `appstart` مخصصة" لتحديد أي ViewModel لتقديمها أولاً [2] [7].
باختصار ، يقوم MVVMcross بتعزيز انعكاس لأتمتة عملية حل التبعيات أثناء بناء الكائن ، مما يسهل إدارة الرسوم البيانية للكائنات المعقدة ودعم تطوير المنصات عبر الحد الأدنى من الكود.
الاستشهادات:[1] https://www.mvvmcross.com/documentation/fundamentals/dependency injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvvmcross-handbook/using-mvvmcross-to-create-your-first-xamarin-app/creating-the-core-project/adding-an-app-class
[3] http://wojosoftware.com/software/mvvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduction-to-mvvmcross-platform
[6] https://github.com/media-tools/sqlite-net-extensions
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[9] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup