Hilt'i diğer Jetpack kitaplıklarıyla kullanma

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()
}