0Pricing
Android Academy · บทเรียน

การฉีดเข้า 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เหตุใดจึงต้องใช้การฉีดส่วนพึ่งพา
  2. การตั้งค่า Hilt
  3. โมดูลและผู้ให้บริการ
  4. การฉีดเข้า ViewModels
← กลับไปที่ Android Academy