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 yerleştirme başlıklı makaleyi inceleyin.

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 ViewModel örneğini normal şekilde alabilir:

@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
  private val exampleViewModel: ExampleViewModel by viewModels()
  ...
}

ViewModel'lerle destekli ekleme özelliğini kullanma

Hilt, ViewModel'ler için destekli eklemeyi 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'leri 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
    }
}

Compose'da, gezinme veya ekran başlatma sırasında hiltViewModel işlevine ileterek destekli fabrika 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, ViewModel ile aynı yaşam döngüsüne sahip olan ViewModelComponent tarafından sağlanır 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 arasında 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ı, geçerli 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ı NavEntry kapsamına alı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 Navigation 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 de 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.3.0")
}

Modern

dependencies {
  ...
  implementation 'androidx.hilt:hilt-work:1.0.0'
  // When using Kotlin.
  ksp 'androidx.hilt:hilt-compiler:1.3.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()
}