หน้าข้อมูลเบื้องต้นเกี่ยวกับ Dagger อธิบายว่า Dagger จะช่วยให้คุณใช้ทรัพยากร Dependency โดยอัตโนมัติได้อย่างไร ในแอปของคุณ เมื่อมี Dagger คุณไม่จำเป็นต้องเขียนอะไรให้น่าเบื่อ โค้ดต้นแบบที่เกิดข้อผิดพลาดได้ง่าย
สรุปแนวทางปฏิบัติแนะนำ
- ใช้การแทรกตัวสร้างด้วย
@Injectเพื่อเพิ่มประเภทให้กับ Dagger กราฟทุกครั้งที่เป็นไปได้ หรือไม่เช่นนั้น- ใช้
@Bindsเพื่อบอก Dagger ว่าควรใช้อินเทอร์เฟซใด - ใช้
@Providesเพื่อบอก Dagger เกี่ยวกับวิธีจัดชั้นเรียนที่โปรเจ็กต์ของคุณ ไม่ได้เป็นเจ้าของ
- ใช้
- คุณควรประกาศโมดูลเพียงครั้งเดียวในคอมโพเนนต์
- ตั้งชื่อคำอธิบายประกอบขอบเขต โดยพิจารณาจากอายุการใช้งานที่ฟิลด์
เช่น
@ApplicationScope,@LoggedUserScopeและ@ActivityScope
การเพิ่มทรัพยากร Dependency
หากต้องการใช้ Dagger ในโปรเจ็กต์ของคุณ ให้เพิ่มทรัพยากร Dependency เหล่านี้ไปยังแอปพลิเคชันของคุณใน
ไฟล์ build.gradle คุณสามารถค้นหา Dagger เวอร์ชันล่าสุดได้
ในโปรเจ็กต์ GitHub นี้
Kotlin
plugins { id 'kotlin-kapt' } dependencies { implementation 'com.google.dagger:dagger:2.x' kapt 'com.google.dagger:dagger-compiler:2.x' }
Java
dependencies { implementation 'com.google.dagger:dagger:2.x' annotationProcessor 'com.google.dagger:dagger-compiler:2.x' }
เครื่องหมายกริชใน Android
ลองใช้ตัวอย่างแอป Android ที่มีกราฟทรัพยากร Dependency จากรูปที่ 1
รูปที่ 1 กราฟการขึ้นต่อกันของตัวอย่าง รหัส
ใน Android โดยปกติแล้วคุณจะสร้างกราฟ Dagger ที่แสดงอยู่ในแอปพลิเคชันของคุณ
เพราะคุณต้องการให้อินสแตนซ์ของกราฟอยู่ในหน่วยความจำตราบใดที่
ที่กำลังทำงาน ด้วยวิธีนี้ กราฟจะแนบไปกับวงจรของแอป ในบางส่วน
คุณอาจต้องการให้มีบริบทของแอปพลิเคชันใน
กราฟ นอกจากนี้ คุณยังต้องให้กราฟอยู่ใน
Application ข้อดีอย่างหนึ่งของวิธีนี้
วิธีการก็คือกราฟนี้ใช้ได้ในคลาสเฟรมเวิร์กอื่นๆ ของ Android
นอกจากนี้ ยังทำให้การทดสอบง่ายขึ้นโดยอนุญาตให้คุณใช้
Application ชั้นเรียนในการทดสอบ
เนื่องจากอินเทอร์เฟซที่สร้างกราฟมีคำอธิบายประกอบ @Component
คุณสามารถตั้งชื่อว่า ApplicationComponent หรือ ApplicationGraph คุณมักจะเก็บไว้
อินสแตนซ์ของคอมโพเนนต์นั้นในคลาส Application ที่กำหนดเองแล้วเรียกใช้
ทุกครั้งที่คุณต้องการกราฟของแอปพลิเคชัน ดังที่แสดงในโค้ดต่อไปนี้
snippet:
Kotlin
// Definition of the Application graph @Component interface ApplicationComponent {