不推荐使用DaggerHilt'Assisted'和'ViewModelInject'。在DaggerHiltViewModel1.0.0-alpha03中

在 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'

我可以使用下面的

class MyViewModel @ViewModelInject constructor(
    private val repository: Repository,
    @Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {

    // Some codes...
}

但是,当我迁移到 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'

我收到了警告

'Assisted' is deprecated. Deprecated in Java
'ViewModelInject' is deprecated. Deprecated in Java
'ViewModelInject' is deprecated. Deprecated in Java
'Assisted' is deprecated. Deprecated in Java

有什么新的工作方式?

回答

在 alpha03 中,现在使用新的@HiltViewModel和正常的@Inject,如下所示。

@HiltViewModel
class MyViewModel @Inject constructor(
    private val repository: Repository,
    private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {

    // Some code
}


回答

在匕首柄的最后一次更新,他们做了一些改变,所以你的情况,你可以使用@HiltViewModel,并@Inject与视图模型使用。

@HiltViewModel
class MyViewModel @Inject constructor(
    private val repository: Repository,
    private val savedStateHandle: SavedStateHandle
) : ViewModel(), LifecycleObserver {
    // Some codes...
}

此外,如果您使用的是ApplicationComponent,则在最新更新中将其更改为SingletonComponent
所以在你的模块类中。

@Module
@InstallIn(SingletonComponent::class.java)
object hiltmodel....{}

  • Are you sure ? cause we only used to add ViewModelInject but in the latest version we use HiltViewModel along with Inject for viewmodel class constructor

回答

@ViewModelInject已被弃用并已被@HiltViewModel取代。

使用HiltViewModel注释的 ViewModel将可供 HiltViewModelFactory 创建。包含用Inject注释的构造函数的 HiltViewModel将在 Dagger 的 Hilt 注入的构造函数参数中定义其依赖项。
https://dagger.dev/api/latest/dagger/hilt/android/lifecycle/HiltViewModel

一个简单的 ViewModel 现在看起来像:

@HiltViewModel
class MainViewModel @Inject constructor(application: Application) :
AndroidViewModel(application) {
}

or

@HiltViewModel
class MainViewModel @Inject constructor() :
ViewModel() {
}

whatever your use case might be.


以上是不推荐使用DaggerHilt'Assisted'和'ViewModelInject'。在DaggerHiltViewModel1.0.0-alpha03中的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>