Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dagger Hilt 'Assisted' and 'ViewModelInject' is deprecated. in Dagger Hilt View Model 1.0.0-alpha03

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?

like image 425
Elye Avatar asked Feb 13 '21 13:02

Elye


People also ask

How do you inject ViewModel with hilt?

Inject ViewModel objects with Hilt Provide a ViewModel by annotating it with @HiltViewModel and using the @Inject annotation in the ViewModel object's constructor.

What is HiltViewModel?

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) { // ... } }

What is hilt dependency injection?

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.


2 Answers

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 } 
like image 97
Elye Avatar answered Oct 06 '22 14:10

Elye


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....{} 
like image 39
Taki Avatar answered Oct 06 '22 14:10

Taki