这是我实现Lifecycle SavedState逻辑的 DI 设置:
基本活动模块:
@Module
abstract class BaseActivityModule<A : AppCompatActivity> {
@Binds
abstract fun provideActivity(activity : A): AppCompatActivity
@Binds
internal abstract fun bindSavedStateRegistryOwner(activity : A): SavedStateRegistryOwner
@Module
companion object {
@Provides
@ActivityContext
fun provideContext(activity: AppCompatActivity): Context = activity
}
}
飞溅活动模块:
@Module
abstract class SplashActivityModule : BaseActivityModule<SplashActivity>() {
@Binds
@IntoMap
@ViewModelKey(SplashViewModel::class)
abstract fun bindFactory(factory: SplashViewModel.Factory): ViewModelAssistedFactory<out ViewModel>
@Module
companion object{
@JvmStatic
@Nullable
@Provides
fun provideDefaultArgs(): Bundle? {
return null
}
}
}
视图模型:
class SplashViewModel @AssistedInject constructor(
@Assisted stateHandle: SavedStateHandle,
...
) : BaseViewModel(stateHandle,...) {
@AssistedInject.Factory
interface Factory : ViewModelAssistedFactory<SplashViewModel>
}
现在假设我想在ViewModel
my中添加另一个Activity
,这将失败:
另一个视图模型:
class AnotherViewModel @AssistedInject constructor(
@Assisted stateHandle: SavedStateHandle,
...
) : BaseViewModel(stateHandle,...) {
@AssistedInject.Factory
interface Factory : ViewModelAssistedFactory<AnotherViewModel>
}
飞溅活动模块:
@Module
abstract class SplashActivityModule : BaseActivityModule<SplashActivity>() {
@Binds
@IntoMap
@ViewModelKey(SplashViewModel::class)
abstract fun bindFactory(factory: SplashViewModel.Factory): ViewModelAssistedFactory<out ViewModel>
@Binds
@IntoMap
@ViewModelKey(AnotherViewModel::class)
abstract fun bindAnotherFactory(factory: AnotherViewModel.Factory): ViewModelAssistedFactory<out ViewModel>
@Module
companion object{
@JvmStatic
@Nullable
@Provides
fun provideDefaultArgs(): Bundle? {
return null
}
}
}
错误:[Dagger/MissingBinding] ....如果没有 @Inject 构造函数或 @Provides-annotated 方法,则无法提供另一个视图模型。公共抽象接口 ApplicationComponent 扩展 dagger.android.AndroidInjector<...Application> {
我怎样才能使这项工作?