Hilt, diğer Jetpack kitaplıklarındaki sınıfları sağlamak için uzantılar içerir. Hilt şu anda aşağıdaki Jetpack bileşenlerini desteklemektedir:
- Oluştur
ViewModel- Gezinme
- WorkManager
Bu entegrasyonlardan yararlanmak için Hilt bağımlılıklarını eklemeniz gerekir. Bağımlılık ekleme hakkında daha fazla bilgi için Hilt ile bağımlılık ekleme bölümüne bakın.
Jetpack Compose ile entegrasyon
Hilt'in Jetpack Compose ile nasıl entegre olduğunu öğrenmek için Compose ve diğer kitaplıklar bölümündeki Hilt bölümüne bakın.
Hilt ile ViewModel nesnelerini yerleştirme
@HiltViewModel ile açıklama ekleyerek ve ViewModel nesnesinin oluşturucusunda @Inject açıklamasını kullanarak ViewModel sağlayın.
@HiltViewModel class ExampleViewModel @Inject constructor( private val savedStateHandle: SavedStateHandle, private val repository: ExampleRepository ) : ViewModel() { ... }
Ardından, @AndroidEntryPoint ile açıklama eklenen bir etkinlik, ViewModelProvider veya by viewModels() KTX uzantıları kullanılarak normal şekilde ViewModel örneğini alabilir:
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
ViewModel'lerle destekli ekleme özelliğini kullanma
Hilt, ViewModel'ler için destekli enjeksiyonu destekler. Yardımlı yerleştirme, Hilt tarafından yönetilen bağımlılıkların yanı sıra dinamik çalışma zamanı bağımsız değişkenlerini yerleştirmenize olanak tanır. Yardımlı eklemeyi kullanmak için ViewModel oluşturucunuzu @AssistedInject ile açıklama ekleyin ve dinamik parametreleri @Assisted ile işaretleyin. Ayrıca, Hilt'in gerekli @ViewModelProvider.Factory öğelerini otomatik olarak oluşturması için köprü görevi gören bir @AssistedFactory arayüzü de tanımlamanız gerekir.
@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 } }
Oluşturma'da, gezinme veya ekran başlatma sırasında hiltViewModel işlevine ileterek destekli fabrika işlevini kullanabilirsiniz. Bu yaklaşım, ViewModel'inizin gezinme eski yığınıyla doğru şekilde kapsamlandırılmasını sağlarken manuel fabrika şablonuna olan ihtiyacı ortadan kaldırır. Daha fazla bilgi için destekli ekleme ile ilgili Hilt belgelerine bakın.
@ViewModelScoped
Tüm Hilt ViewModels, ViewModelComponent tarafından sağlanır. Bu, ViewModel ile aynı yaşam döngüsünü izler ve bu nedenle yapılandırma değişikliklerinden etkilenmez.
Bir bağımlılığı ViewModel ile sınırlamak için @ViewModelScoped ek açıklamasını kullanın.
Bir @ViewModelScoped türü, kapsamı belirlenmiş türün tek bir örneğinin ViewModel içine yerleştirilen tüm bağımlılıklar genelinde sağlanmasını sağlar.
Kapsamlı örneği isteyen diğer ViewModel örnekleri farklı bir örnek alır.
Tek bir örneğin çeşitli ViewModel'ler arasında paylaşılması gerekiyorsa @ActivityRetainedScoped veya @Singleton kullanılarak kapsamı belirlenmelidir.
Jetpack Navigation kitaplıklarıyla entegrasyon
Gradle dosyanıza aşağıdaki ek bağımlılıkları ekleyin:
app/build.gradle
Kotlin
dependencies { ... implementation("androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0") }
Modern
dependencies { ... implementation 'androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0' }
Jetpack Compose'da, Navigation Compose ve Navigation 3 kitaplıkları, mevcut gezinme hedefiyle kapsamı belirlenmiş bir ViewModel'i otomatik olarak almak için hiltViewModel işlevini kullanır.
Navigation 3'te gezinme hedefleri NavEntry ile gösterilir.
rememberViewModelStoreNavEntryDecorator kullanarak ViewModel'ları NavEntrys ile sınırlayın. İlişkili ViewModel'i almak için hiltViewModel sağlayıcısının içinde NavEntry kullanın.
NavDisplay(..., entryDecorators = listOf(..., rememberViewModelStoreNavEntryDecorator()), entryProvider = entryProvider { entry{ key -> val viewModel = hiltViewModel () MyScreen(viewModel = viewModel) } } )
Navigation Compose'da ViewModel'lar, gezinme hedefleriyle otomatik olarak kapsamlandırılır. Daha fazla bilgi için Hilt ve Gezinme başlıklı makaleyi inceleyin.
val viewModel = hiltViewModel()
WorkManager'ı Hilt ile yerleştirme
Gradle dosyanıza aşağıdaki ek bağımlılıkları ekleyin. Kitaplığa ek olarak, Hilt ek açıklama işleyicisinin üzerinde çalışan ek bir ek açıklama işleyicisi eklemeniz gerektiğini unutmayın:
app/build.gradle
Kotlin
dependencies { implementation("androidx.hilt:hilt-work:1.0.0") // When using Kotlin. ksp("androidx.hilt:hilt-compiler:1.4.0") }
Modern
dependencies { ... implementation 'androidx.hilt:hilt-work:1.0.0' // When using Kotlin. ksp 'androidx.hilt:hilt-compiler:1.4.0' }
Sınıfta @HiltWorker ek açıklamasını ve Worker nesnesinin oluşturucusunda @AssistedInject kullanarak Worker yerleştirin. Worker nesnelerinde yalnızca @Singleton veya kapsamı belirlenmemiş bağlamalar kullanabilirsiniz. Ayrıca Context ve WorkerParameters bağımlılıklarını @Assisted ile açıklama eklemeniz gerekir:
@HiltWorker class ExampleWorker @AssistedInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
Ardından, Application sınıfınızın Configuration.Provider arayüzünü uygulamasını, HiltWorkFactory örneği yerleştirmesini ve bunu aşağıdaki gibi WorkManager yapılandırmasına iletmesini sağlayın:
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }