In Dagger Hilt View Model 1.0.0-alpha01
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01" implementation 'com.google.dagger:hilt-android:2.28-alpha' kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01' kapt 'com.google.dagger:hilt-android-compiler:2.28-alpha'
I can use the below
class MyViewModel @ViewModelInject constructor( private val repository: Repository, @Assisted private val savedStateHandle: SavedStateHandle ) : ViewModel(), LifecycleObserver { // Some codes... }
However, when I migrate to Dagger Hilt View Model 1.0.0-alpha03
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03" implementation 'com.google.dagger:hilt-android:2.31.2-alpha' kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha03' kapt 'com.google.dagger:hilt-android-compiler:2.31.2-alpha'
I got the warnings
'Assisted' is deprecated. Deprecated in Java 'ViewModelInject' is deprecated. Deprecated in Java 'ViewModelInject' is deprecated. Deprecated in Java 'Assisted' is deprecated. Deprecated in Java
What's the new way of working on it?
Inject ViewModel objects with Hilt Provide a ViewModel by annotating it with @HiltViewModel and using the @Inject annotation in the ViewModel object's constructor.
A Hilt View Model is a Jetpack ViewModel that is constructor injected by Hilt. To enable injection of a ViewModel by Hilt use the @HiltViewModel annotation: @HiltViewModel public final class FooViewModel extends ViewModel { @Inject FooViewModel(SavedStateHandle handle, Foo foo) { // ... } }
Hilt is a dependency injection library for Android that reduces the boilerplate of doing manual dependency injection in your project. Doing manual dependency injection requires you to construct every class and its dependencies by hand, and to use containers to reuse and manage dependencies.
In alpha03, Use the new @HiltViewModel
and the normal @Inject
now as shown below.
@HiltViewModel class MyViewModel @Inject constructor( private val repository: Repository, private val savedStateHandle: SavedStateHandle ) : ViewModel(), LifecycleObserver { // Some code }
In the last update of dagger hilt, they made few changes, so in your case, you can use @HiltViewModel
and @Inject
to use it with ViewModel.
@HiltViewModel class MyViewModel @Inject constructor( private val repository: Repository, private val savedStateHandle: SavedStateHandle ) : ViewModel(), LifecycleObserver { // Some codes... }
Also, if you were using ApplicationComponent
, in the latest update it is changed to SingletonComponent
.
So in your module class this way.
@Module @InstallIn(SingletonComponent::class.java) object hiltmodel....{}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With