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

Hilt, diğer Jetpack kitaplıklarından 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 başlıklı makaleyi inceleyin.

Jetpack Compose ile entegrasyon

Hilt'in Jetpack Compose ile nasıl entegre olduğunu görmek için Compose ve diğer kitaplıklar sayfasının Hilt bölümüne bakın.

Hilt ile ViewModel nesneleri ekleme

ViewModel nesnesinin oluşturucusunda @HiltViewModel ile ek açıklama ekleyerek ve @Inject ek açıklamasını kullanarak bir ViewModel sağlayın.

@HiltViewModel
class ExampleViewModel @Inject constructor(
  private val savedStateHandle: SavedStateHandle,
  private val repository: ExampleRepository
) : ViewModel() {
  ...
}

Ardından, @AndroidEntryPoint ile ek açıklama eklenen bir etkinlik, ViewModelProvider veya by viewModels() KTX uzantılarını kullanarak ViewModel örneğini normal şekilde alabilir:

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

ViewModel'lerle destekli ekleme kullanma

Hilt, ViewModel'ler için destekli eklemeyi destekler. Destekli yerleştirme, Hilt tarafından yönetilen bağımlılıklarla birlikte dinamik çalışma zamanı bağımsız değişkenleri eklemenize olanak tanır. Yardımlı ekleme özelliğini kullanmak için ViewModel oluşturucunuza @AssistedInject ek açıklamasını ekleyin ve dinamik parametreleri @Assisted ile işaretleyin. Ayrıca, Hilt'in gerekli @ViewModelProvider.Factory öğesini otomatik olarak oluşturması için köprü görevi gören bir @AssistedFactory arayüzü 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 destekli factory'yi hiltViewModel işlevine ileterek kullanabilirsiniz. Bu yaklaşım, ViewModel'inizi gezinme eski yığınına doğru şekilde kapsamlandırırken manuel fabrika şablonu ihtiyacını ortadan kaldırır. Daha fazla bilgi için destekli ekleme ile ilgili Hilt belgelerini inceleyin.

@ViewModelScoped

Tüm Hilt ViewModel'leri, ViewModel ile aynı yaşam döngüsünü izleyen ViewModelComponent tarafından sağlanır ve bu nedenle yapılandırma değişikliklerinden etkilenmez. Bir bağımlılığın kapsamını ViewModel olarak belirlemek için @ViewModelScoped ek açıklamasını kullanın.

@ViewModelScoped türü, ViewModel içine eklenen tüm bağımlılıklarda kapsamlı türün tek bir örneğinin sağlanmasını sağlar. Kapsamlı örneği isteyen bir ViewModel'in diğer ö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 gezinme 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 hedefine göre kapsamlandırılmış bir ViewModel'i otomatik olarak almak için hiltViewModel işlevini kullanır.

Navigasyon 3'te, navigasyon hedefleri NavEntry ile temsil edilir. rememberViewModelStoreNavEntryDecorator kullanarak ViewModel'leri NavEntry kapsamına alma İlgili ViewModel'i almak için sağlayıcıda hiltViewModel öğesini kullanın.NavEntry

NavDisplay(...,
  entryDecorators = listOf(..., rememberViewModelStoreNavEntryDecorator()),
  entryProvider = entryProvider {
    entry { key ->
      val viewModel = hiltViewModel()
      MyScreen(viewModel = viewModel)
    }
  }
)

Navigation Compose'da ViewModel'ler otomatik olarak gezinme hedeflerine göre kapsamlandırılır. Daha fazla bilgi için Hilt ve Gezinme başlıklı makaleyi inceleyin.

val viewModel = hiltViewModel()

Hilt ile WorkManager'ı ekleme

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 ek açıklamasını kullanarak Worker ekleyin. Worker nesnelerinde yalnızca @Singleton veya kapsamı belirlenmemiş bağlamaları kullanabilirsiniz. Ayrıca Context ve WorkerParameters bağımlılıklarına @Assisted ile ek 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ı sağlayın, bir HiltWorkFactory örneği ekleyin ve bunu aşağıdaki gibi WorkManager yapılandırmasına iletin:

@HiltAndroidApp
class ExampleApplication : Application(), Configuration.Provider {

  @Inject lateinit var workerFactory: HiltWorkerFactory

  override fun getWorkManagerConfiguration() =
      Configuration.Builder()
            .setWorkerFactory(workerFactory)
            .build()
}