O Hilt inclui extensões para fornecer classes de outras bibliotecas do Jetpack. Atualmente, o Hilt é compatível com os seguintes componentes do Jetpack:
ViewModel
WorkManager
É preciso adicionar as dependências do Hilt para aproveitar essas integrações. Para mais informações sobre como adicionar dependências, consulte Injeção de dependências com Hilt.
Injetar objetos ViewModel com Hilt
Adicione as seguintes dependências a mais ao arquivo do Gradle. Além da biblioteca, você precisa incluir outro processador de anotações que funcione sobre o processador Hilt:
app/build.gradle
...
dependencies {
...
implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'
// When using Kotlin.
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
// When using Java.
annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}
Forneça um ViewModel
usando a
anotação @ViewModelInject
no construtor do objeto ViewModel
. Também
é necessário anotar a dependência SavedStateHandle
com @Assisted
:
Kotlin
class ExampleViewModel @ViewModelInject constructor( private val repository: ExampleRepository, @Assisted private val savedStateHandle: SavedStateHandle ) : ViewModel() { ... }
Java
public class ExampleViewModel extends ViewModel { private final ExampleRepository repository; private final SavedStateHandle savedStateHandle; @ViewModelInject ExampleViewModel( ExampleRepository repository, @Assisted SavedStateHandle savedStateHandle) { this.repository = repository; this.savedStateHandle = savedStateHandle; } ... }
Em seguida, uma atividade ou um fragmento anotado com @AndroidEntryPoint
pode
receber a instância ViewModel
normalmente usando ViewModelProvider
ou as extensões KTX by viewModels()
:
Kotlin
@AndroidEntryPoint class ExampleActivity : AppCompatActivity() { private val exampleViewModel: ExampleViewModel by viewModels() ... }
Java
@AndroidEntryPoint public class ExampleActivity extends AppCompatActivity { private ExampleViewModel exampleViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); exampleViewModel = new ViewModelProvider(this).get(ExampleViewModel.class); } ... }
Injetar WorkManager com Hilt
Adicione as seguintes dependências a mais ao arquivo do Gradle. Além da biblioteca, você precisa incluir outro processador de anotações que funcione sobre o processador Hilt:
app/build.gradle
...
dependencies {
...
implementation 'androidx.hilt:hilt-work:1.0.0-alpha01'
// When using Kotlin.
kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
// When using Java.
annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}
Injete um Worker
usando a
anotação @WorkerInject
no construtor do objeto Worker
. Só é possível usar
@Singleton
ou vinculações sem escopo em objetos Worker
. Também é necessário
anotar as dependências Context
e WorkerParameters
com @Assisted
:
Kotlin
class ExampleWorker @WorkerInject constructor( @Assisted appContext: Context, @Assisted workerParams: WorkerParameters, workerDependency: WorkerDependency ) : Worker(appContext, workerParams) { ... }
Java
public class ExampleWorker extends Worker { private final WorkerDependency workerDependency; @WorkerInject ExampleWorker( @Assisted @NonNull Context context, @Assisted @NonNull WorkerParameters params, WorkerDependency workerDependency ) { super(context, params); this.workerDependency = workerDependency; } ... }
Em seguida, faça com que a classe Application
implemente a interface
Configuration.Provider
, injete uma instância de HiltWorkFactory
e transmita-a para a
configuração WorkManager
da seguinte maneira:
Kotlin
@HiltAndroidApp class ExampleApplication : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration() = Configuration.Builder() .setWorkerFactory(workerFactory) .build() }
Java
@HiltAndroidApp public class ExampleApplication extends Application implements Configuration.Provider { @Inject HiltWorkerFactory workerFactory; @Override public Configuration getWorkManagerConfiguration() { return Configuration.Builder() .setWorkerFactory(workerFactory) .build(); } }