การฉีดเข้า ViewModels
ใช้ @HiltViewModel เพื่อการฉีดที่สะอาด
การฉีดเข้า ViewModels เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
ฉีด Dependency เข้า ViewModel ด้วย Hilt
ViewModels มีลักษณะพิเศษ: เฟรมเวิร์กจะสร้างอินสแตนซ์ผ่าน factory Hilt เชื่อมต่อกับกระบวนการนี้ผ่าน annotation @HiltViewModel
ใส่ Annotation ให้ ViewModel
ทำเครื่องหมาย ViewModel ด้วย @HiltViewModel และใส่ annotation @Inject ให้คอนสตรัคเตอร์
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
@HiltViewModel
class UserViewModel @Inject constructor(
private val repo: UserRepository
) : ViewModel()Hilt จัดเตรียมอะไรให้
Hilt จะค้นหาพารามิเตอร์แต่ละตัวของคอนสตรัคเตอร์ในกราฟ dependency ตราบใดที่ UserRepository ถูกเชื่อมไว้แล้ว (ผ่านโมดูลหรือการฉีดผ่านคอนสตรัคเตอร์) Hilt จะจัดเตรียมให้โดยอัตโนมัติ
เรียกใช้ใน Compose
ใช้ hiltViewModel() ภายใน Composable เพื่อรับ ViewModel ที่ Hilt จัดเตรียมให้
import androidx.hilt.navigation.compose.hiltViewModel
@Composable
fun UserScreen(
vm: UserViewModel = hiltViewModel()
) {
val state by vm.uiState
.collectAsStateWithLifecycle()
}โฮสต์ต้องเป็นจุดเริ่มต้น
เพื่อให้ hiltViewModel() ทำงานได้ Activity ที่เป็นโฮสต์ต้องมี annotation @AndroidEntryPoint ซึ่งจะเชื่อม Compose เข้ากับกราฟ Hilt
@AndroidEntryPoint
class MainActivity : ComponentActivity()ฉีด Dependency อื่น ๆ
คุณสามารถฉีดสิ่งใดก็ตามที่อยู่ในกราฟได้ เช่น รีโพซิทอรี, use case และแม้แต่ฐานข้อมูล Room ที่จัดเตรียมโดยโมดูล
@HiltViewModel
class HomeViewModel @Inject constructor(
private val getUsers: GetUsersUseCase,
private val analytics: Analytics
) : ViewModel()ฉีด Application Context
ต้องการ context ใช่หรือไม่ ให้ฉีด application context ที่ระบุคุณสมบัติด้วย @ApplicationContext
@HiltViewModel
class PrefsViewModel @Inject constructor(
@ApplicationContext private val context: Context
) : ViewModel()SavedStateHandle
Hilt จัดเตรียม SavedStateHandle ให้โดยอัตโนมัติ ซึ่งใช้เก็บอาร์กิวเมนต์การนำทางและยังคงอยู่แม้โปรเซสจะถูกทำลาย
@HiltViewModel
class DetailViewModel @Inject constructor(
handle: SavedStateHandle
) : ViewModel() {
val id: Int = handle.get<Int>("id") ?: 0
}การเชื่อมต่อทั้งหมด
ตั้งแต่ต้นจนจบ: Module จัดเตรียมรีโพซิทอรี → Hilt ฉีดรีโพซิทอรีเข้าไปใน ViewModel → Compose รับ ViewModel ผ่าน hiltViewModel() โดยไม่ต้องมี factory ที่สร้างด้วยมือเลย
ไม่ต้องเขียนโค้ด Factory ด้วยมือ
หากไม่มี Hilt คุณจะต้องเขียน ViewModelProvider.Factory แบบกำหนดเองสำหรับ ViewModel ทุกตัวที่ต้องรับอาร์กิวเมนต์ในคอนสตรัคเตอร์ @HiltViewModel ช่วยกำจัดขั้นตอนทั้งหมดนี้
ประกอบทุกส่วนเข้าด้วยกัน
ตอนนี้คุณมีชุดเทคโนโลยีสมัยใหม่ครบถ้วนแล้ว: ViewModel + สถานะที่สอดคล้องกับวงจรชีวิต, การคงอยู่ของข้อมูลด้วย Room, coroutines และ Flow ทั้งหมดเชื่อมต่อกันด้วย Hilt DI
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับการฉีด dependency เข้า ViewModel
สรุปทบทวน
คุณได้เรียนรู้ว่า:
- คอนสตรัคเตอร์ที่มี
@HiltViewModel+@Injectช่วยให้ Hilt สร้าง ViewModels ได้ - รับ ViewModels ใน Compose ด้วย
hiltViewModel()ภายในโฮสต์ที่มี@AndroidEntryPoint - ฉีดรีโพซิทอรี,
@ApplicationContextและSavedStateHandleได้ - ไม่จำเป็นต้องสร้าง factory ด้วยมือ
คำถามที่พบบ่อย
บทเรียน “การฉีดเข้า ViewModels” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การฉีดเข้า ViewModels” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การฉีดเข้า ViewModels”
ใช้ @HiltViewModel เพื่อการฉีดที่สะอาด คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การฉีดเข้า ViewModels” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม
ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา
- การตั้งค่า Hilt
- โมดูลและผู้ให้บริการ
- การฉีดเข้า ViewModels