มีดที่ไม่มีด้ามจับที่ดี มันจะใช้งานยากฉันใด
Dagger จึงต้องมี Hilt ฉันนั้น !!

ทางทีมพัฒนา Android ได้ปล่อย Hilt library ให้ใช้งาน
มาดูกันหน่อยว่า Dagger Hilt มีเป้าหมายและทำงานอย่างไร ?
และแตกต่างจาก Dagger Android อย่างไร ?

เป้าหมายหลัก ๆ ของ Hilt ประกอบไปด้วย

  • ทำให้การใช้งานง่ายขึ้น ซึ่งทำการ gernerate Dagger component ต่าง ๆ  และ auto-inject ไปยัง Android class ให้เอง เหมือนกับ Spring Framework เลย
  • ทำให้การจัดการ component ต่าง ๆ รวมทั้งการกำหนด scope การทำงานในรูปแบบที่เป็นมาตรฐาน
  • ทำให้ code อ่านง่ายและเข้าใจง่ายขึ้น
  • ลด code ขยะ ๆ ออกไปเยอะ
  • ทำให้คนเริ่มต้นใช้งาน Dagger สบายขึ้น
  • ที่ขาดไปไม่ได้คือ ช่วยให้การทดสอบง่ายขึ้นอีกด้วย เพราะว่า Hilt ทำการ generate Dagger component ที่เหมือนนกับ production ให้เลย และเราสามารถเปลี่ยนแปลงได้เองอีกด้วย เป็นส่วนที่ชอบมาก ๆ

ปล. เป็นการ generate code สำหรับสิ่งที่จะ generate code ต่อไป
อาจจะงง ๆ หน่อย แต่ก็พอเข้าใจได้

และแน่นอนว่ามีใน AndroidX package หรือ Jetpack นั่นเอง
ทำให้ทำงานร่วมกับพวก ViewModel และ WorkManager ได้

เพื่อความเข้าใจมาเริ่มต้นใช้งานกันหน่อย

เริ่มจากการ configuration เพื่อใช้งาน Hilt ใน Android project

เพิ่มที่ไฟล์ build.gradle ของ project

และเพิ่ม dependency ต่าง ๆ ใน app/build.gradle

มาลองใช้ความสามารถของ Hilt กันบ้าง ประกอบไปด้วย

  • Dependency Injection ซึ่งสามารถนำ class ต่าง ๆ มาใช้งานใน Android class ได้เลย
  • สามารถกำหนด scope ของ instance ต่าง ๆ ได้
  • จัดการ Module ใน Hilt ทั้ง Provide, Scope และ Binding
  • การทดสอบ ซึ่งทาง Hilt ได้เตรียม HiltAnddroidTest มาให้ใช้งาน จะทำการสร้าง Hilt component ของการทดสอบมาให้ รวมทั้งมี HiltAndroidRule สำหรับการจัดการ ccomponent และ state และ inject เข้ามาได้ในแต่ละ test

มาดูตัวอย่างง่าย ๆ ของ Depednency Injection กัน

เริ่มที่ class Application ของ project เขียนสั้น ๆ แบบนี้
เพื่อให้สามารถใช้งาน Hilt ได้ เป็นการสร้าง Container กลางไว้
สำหรับสร้าง instance ต่าง ๆ ไว้
รวมทั้งสามารถใช้งาน Depenendcy Injeccttion ได้แล้ว

จากนั้นทำการสร้าง class ทำงานนิดหน่อย

ในตัวอย่างคือ DateFormatter ดังนี้

จากนั้นใน class Activity/Fragment สามารถใช้งานได้

ด้วยการใส่ @AndroidEntryPoint เข้ามา
เพื่อให้ Hilt จัดการการสร้างแและใช้งาน instance ให้
แน่นอนว่าสาามารถ Inject Dateformatter มาใช้งานได้เลย 
ซึ่งการ Inject แบบนี้จะเรียกว่า Field Injection นั่นเอง ดังนี้

เพียงเท่านี้ก็สามารถใช้งาน Hilt แบบง่าย ๆ ได้แล้ว
แต่ยังมีความสามารถอื่น ๆ อีกเพียบนะครับ ลองใช้งานกันดู

ข้อมูลเพิ่มเติม