การใช้ Dagger ในแอป Android

หน้าข้อมูลเบื้องต้นเกี่ยวกับ 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

LockActivity ขึ้นอยู่กับ LoginViewModel ซึ่งขึ้นอยู่กับ UserRepository
  ซึ่งขึ้นอยู่กับ UserLocalDataSource และ UserRemoteDataSource ซึ่งในทางกลับกัน
  ขึ้นอยู่กับรูปแบบอุปกรณ์เพิ่มเติม

รูปที่ 1 กราฟการขึ้นต่อกันของตัวอย่าง รหัส

ใน Android โดยปกติแล้วคุณจะสร้างกราฟ Dagger ที่แสดงอยู่ในแอปพลิเคชันของคุณ เพราะคุณต้องการให้อินสแตนซ์ของกราฟอยู่ในหน่วยความจำตราบใดที่ ที่กำลังทำงาน ด้วยวิธีนี้ กราฟจะแนบไปกับวงจรของแอป ในบางส่วน คุณอาจต้องการให้มีบริบทของแอปพลิเคชันใน กราฟ นอกจากนี้ คุณยังต้องให้กราฟอยู่ใน Application ข้อดีอย่างหนึ่งของวิธีนี้ วิธีการก็คือกราฟนี้ใช้ได้ในคลาสเฟรมเวิร์กอื่นๆ ของ Android นอกจากนี้ ยังทำให้การทดสอบง่ายขึ้นโดยอนุญาตให้คุณใช้ Application ชั้นเรียนในการทดสอบ

เนื่องจากอินเทอร์เฟซที่สร้างกราฟมีคำอธิบายประกอบ @Component คุณสามารถตั้งชื่อว่า ApplicationComponent หรือ ApplicationGraph คุณมักจะเก็บไว้ อินสแตนซ์ของคอมโพเนนต์นั้นในคลาส Application ที่กำหนดเองแล้วเรียกใช้ ทุกครั้งที่คุณต้องการกราฟของแอปพลิเคชัน ดังที่แสดงในโค้ดต่อไปนี้ snippet:

Kotlin

// Definition of the Application graph
@Component
interface ApplicationComponent {