不推荐使用 Dagger Hilt 'Assisted' 和 'ViewModelInject'。在 Dagger Hilt View Model 1.0.0-alpha03 中

Ely*_*lye 32 android android-viewmodel dagger-hilt

在 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'
Run Code Online (Sandbox Code Playgroud)

我可以使用下面的

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

    // Some codes...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我迁移到 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'
Run Code Online (Sandbox Code Playgroud)

我收到了警告

'Assisted' is deprecated. Deprecated in Java
'ViewModelInject' is deprecated. Deprecated in Java
'ViewModelInject' is deprecated. Deprecated in Java
'Assisted' is deprecated. Deprecated in Java
Run Code Online (Sandbox Code Playgroud)

有什么新的工作方式?

Ely*_*lye 65

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

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

    // Some code
}
Run Code Online (Sandbox Code Playgroud)


Tak*_*aki 31

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

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

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

@Module
@InstallIn(SingletonComponent::class.java)
object hiltmodel....{}
Run Code Online (Sandbox Code Playgroud)

  • 你确定吗 ?因为我们只使用添加 ViewModelInject,但在最新版本中,我们使用 HiltViewModel 和 Inject 作为 viewmodel 类构造函数 (2认同)

Anu*_*hav 6

@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.
Run Code Online (Sandbox Code Playgroud)