不推荐使用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.
THE END
二维码