Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCROSS จัดการการสะท้อนกลับระหว่างการก่อสร้างวัตถุได้อย่างไร


MVVMCROSS จัดการการสะท้อนกลับระหว่างการก่อสร้างวัตถุได้อย่างไร


MVVMCROSS ใช้การสะท้อนอย่างกว้างขวางในระหว่างการก่อสร้างวัตถุโดยเฉพาะอย่างยิ่งผ่านการผกผันของคอนเทนเนอร์การควบคุม (IOC) ซึ่งได้รับการจัดการโดยอินสแตนซ์ `mvx.iocprovider` อินสแตนซ์ Singleton นี่คือภาพรวมโดยละเอียดของวิธีการที่ MVVMcross จัดการการสะท้อนในระหว่างการก่อสร้างวัตถุ:

การฉีดคอนสตรัคเตอร์

MVVMCROSS รองรับการฉีดคอนสตรัคเตอร์ซึ่งช่วยให้สามารถแก้ไขพารามิเตอร์โดยอัตโนมัติในระหว่างการสร้างวัตถุโดยใช้การสะท้อนกลับ เมื่อสร้างวัตถุ MVVMCROSS จะทำตามขั้นตอนต่อไปนี้:

1. การสะท้อนกลับเพื่อค้นหาตัวสร้าง: MVVMCROSS ใช้การสะท้อนเพื่อระบุตัวสร้างของคลาสที่กำลังสร้างอินสแตนซ์
2. ความละเอียดพารามิเตอร์: ตรวจสอบพารามิเตอร์ที่ตัวสร้างและระบุอินเทอร์เฟซหรือประเภทที่จำเป็น
3. การแก้ไขการใช้งานที่ลงทะเบียน: สำหรับแต่ละพารามิเตอร์ MVVMCROSS ใช้ `mvx.iocprovider.resolve ()` เพื่อให้ได้การใช้งานที่ลงทะเบียนสำหรับอินเตอร์เฟสหรือประเภท
4. Invoke Constructor: เมื่อพารามิเตอร์ทั้งหมดได้รับการแก้ไข MVVMCROSS จะใช้การสะท้อนกลับเพื่อเรียกใช้ตัวสร้างด้วยพารามิเตอร์ที่ได้รับการแก้ไข

กระบวนการนี้เป็นการเรียกซ้ำหมายถึงหากวัตถุใด ๆ ที่ได้รับการแก้ไขยังต้องการวัตถุอื่น ๆ MVVMcross จะแก้ไขสิ่งเหล่านั้นได้เช่นกัน [1] [4]

การลงทะเบียนจำนวนมากตามอนุสัญญา

MVVMCROSS ยังรองรับการลงทะเบียนจำนวนมากของคลาสโดยใช้การสะท้อนกลับ โดยทั่วไปจะทำในคลาส `แอพ 'ซึ่งสืบทอดมาจาก` mvxapplication' เฟรมเวิร์กใช้การสะท้อนเพื่อค้นหาคลาสทั้งหมดในชุดประกอบหลักที่ลงท้ายด้วย "บริการ" และลงทะเบียนพวกเขาเป็นซิงเกิลที่ขี้เกียจ นี่คือความสำเร็จผ่านขั้นตอนต่อไปนี้:

1. ค้นหาคลาสที่ลงท้ายด้วย "บริการ": การสะท้อนกลับใช้เพื่อค้นหาคลาสทั้งหมดที่มีชื่อที่ลงท้ายด้วย "บริการ" ภายในชุดประกอบหลัก
2. ระบุอินเทอร์เฟซ: สำหรับแต่ละคลาสที่พบ MVVMCROSS ระบุอินเทอร์เฟซที่ใช้
3. ลงทะเบียนเป็น Lazy Singletons: คลาสเหล่านี้จะลงทะเบียนเป็น Singletons ขี้เกียจกับอินเทอร์เฟซของพวกเขา ซึ่งหมายความว่าพวกเขาจะไม่อินสแตนซ์จนกว่าพวกเขาจะได้รับการร้องขอครั้งแรก [2] [4] [7]

ViewModels และการฉีดพึ่งพา

MVVMCROSS ใช้กลไกการฉีดคอนสตรัคเตอร์เดียวกันสำหรับ ViewModels เมื่อสร้าง ViewModel MVVMCROSS จะแก้ไขการอ้างอิงใด ๆ ที่ระบุในคอนสตรัคเตอร์โดยใช้คอนเทนเนอร์ IOC สิ่งนี้ช่วยให้สามารถปรับแต่งบริการได้อย่างง่ายดายในแพลตฟอร์มที่แตกต่างกันและอำนวยความสะดวกในการทดสอบหน่วยโดยการเปิดใช้งานการใช้งานจำลอง [1] [4]

การปรับแต่งและ appstart

คลาส `แอพ 'รับผิดชอบในการลงทะเบียนวัตถุที่กำหนดเองในคอนเทนเนอร์ IOC และเริ่มต้น 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