Hilt menyertakan ekstensi untuk menyediakan class dari library Jetpack lainnya. Saat ini, Hilt mendukung komponen Jetpack berikut:
- Tulis
ViewModel- Navigasi
- WorkManager
Anda harus menambahkan dependensi Hilt untuk memanfaatkan integrasi ini. Untuk mengetahui informasi selengkapnya tentang menambahkan dependensi, lihat Injeksi dependensi dengan Hilt.
Integrasi dengan Jetpack Compose
Untuk melihat cara Hilt berintegrasi dengan Jetpack Compose, lihat bagian Hilt Compose dan library lainnya.
Menginjeksikan objek ViewModel dengan Hilt
Berikan ViewModel dengan menganotasinya
menggunakan @HiltViewModel dan menggunakan anotasi @Inject dalam konstruktor objek
ViewModel.
@HiltViewModel class ExampleViewModel @Inject constructor( private val savedStateHandle: SavedStateHandle, private val repository: ExampleRepository ) : ViewModel() { ... }
Kemudian, aktivitas yang dianotasi dengan @AndroidEntryPoint bisa
mendapatkan instance ViewModel seperti biasa menggunakan ekstensi KTX ViewModelProvider atau
by viewModels():
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
Menggunakan injeksi berbantuan dengan ViewModel
Hilt mendukung injeksi yang dibantu untuk ViewModel. Injeksi yang dibantu memungkinkan Anda
menyuntikkan argumen runtime dinamis bersama dengan dependensi yang dikelola Hilt. Untuk menggunakan
injeksi berbantuan, anotasi konstruktor ViewModel Anda dengan @AssistedInject,
dan tandai parameter dinamis dengan @Assisted. Anda juga harus menentukan antarmuka
@AssistedFactory, yang berfungsi sebagai jembatan bagi Hilt untuk otomatis
membuat @ViewModelProvider.Factory yang diperlukan.
@HiltViewModel(assistedFactory = MyViewModel.Factory::class) class MyViewModel @AssistedInject constructor( @Assisted val userId: String, private val repository: MyRepository ) : ViewModel() { @AssistedFactory interface Factory { fun create(userId: String): MyViewModel } }
Di Compose, Anda dapat menggunakan factory yang dibantu dengan meneruskannya ke
fungsi hiltViewModel selama navigasi atau inisialisasi layar. Pendekatan ini menghilangkan kebutuhan akan boilerplate pabrik manual sekaligus menjaga cakupan ViewModel Anda dengan benar ke tumpukan kembali navigasi. Untuk mengetahui informasi selengkapnya, lihat dokumentasi Hilt tentang injeksi berbantuan.
@ViewModelScoped
Semua ViewModel Hilt disediakan oleh ViewModelComponent yang mengikuti
siklus proses yang sama dengan ViewModel, dan dengan demikian, dapat bertahan saat terjadi perubahan konfigurasi.
Untuk mencakup dependensi ke ViewModel, gunakan anotasi @ViewModelScoped.
Jenis @ViewModelScoped akan menjadikannya agar satu instance dari jenis
cakupan diberikan di semua dependensi yang dimasukkan ke dalam ViewModel.
Instance ViewModel lain yang meminta instance dengan cakupan akan menerima
instance yang berbeda.
Jika satu instance perlu dibagikan ke berbagai ViewModel, instance
harus dicakup menggunakan @ActivityRetainedScoped atau @Singleton.
Integrasi dengan library navigasi Jetpack
Tambahkan dependensi tambahan berikut ke file Gradle Anda:
app/build.gradle
Kotlin
dependencies { ... implementation("androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0") }
Groovy
dependencies { ... implementation 'androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0' }
Di Jetpack Compose, library Navigation Compose dan Navigation 3
menggunakan fungsi hiltViewModel untuk otomatis mengambil ViewModel
yang dicakupkan ke tujuan navigasi saat ini.
Di Navigation 3, tujuan navigasi direpresentasikan oleh NavEntry.
Cakupan ViewModel ke NavEntry menggunakan
rememberViewModelStoreNavEntryDecorator. Gunakan hiltViewModel di dalam penyedia untuk NavEntry tersebut guna mengambil ViewModel terkait.
NavDisplay(..., entryDecorators = listOf(..., rememberViewModelStoreNavEntryDecorator()), entryProvider = entryProvider { entry{ key -> val viewModel = hiltViewModel () MyScreen(viewModel = viewModel) } } )
Di Navigation Compose, ViewModel otomatis dicakup ke tujuan navigasi. Untuk mengetahui informasi selengkapnya, lihat Hilt dan Navigation.
val viewModel = hiltViewModel()
Menginjeksikan WorkManager dengan Hilt
Tambahkan dependensi tambahan berikut ke file Gradle Anda. Perhatikan bahwa selain library, Anda juga perlu menyertakan pemroses anotasi tambahan yang berfungsi mendukung pemroses anotasi Hilt:
app/build.gradle
Kotlin
dependencies { implementation("androidx.hilt:hilt-work:1.0.0") // When using Kotlin. ksp("androidx.hilt:hilt-compiler:1.3.0") }
Groovy
dependencies { ... implementation 'androidx.hilt:hilt-work:1.0.0' // When using Kotlin. ksp 'androidx.hilt:hilt-compiler:1.3.0' }
Injeksikan Worker menggunakan
anotasi @HiltWorker di class dan @AssistedInject di konstruktor objek
Worker. Anda hanya dapat
menggunakan @Singleton atau binding tidak tercakup dalam
objek Worker. Anda juga harus menganotasi dependensi Context dan WorkerParameters
dengan @Assisted:
@HiltWorker class ExampleWorker @AssistedInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
Kemudian, minta class Application Anda
mengimplementasikan antarmuka Configuration.Provider, memasukkan instance HiltWorkFactory, dan meneruskannya ke dalam konfigurasi
WorkManager sebagai berikut:
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }