我想为从@Binds 方法返回的对象使用@Named 限定符,但我注意到这只能通过静态提供方法实现,而在实际实现中我无法弄清楚。所以下面是我想要实现的。
我有一个自定义 UserScope,它将包含用户登录后的所有活动/片段/viewModel,我在 AuthViewModelModule 中有 LoginViewModel,在 UserViewModelModule 中有另一个 VM,VMModule 都绑定 VMProvider.Factory,因此我需要有 @Named 限定符VMFactory 实例,所以我可以在各自的活动/片段中注入 @Named 。
@Module
internal abstract class AuthViewModelModule {
@Binds
@IntoMap
@ViewModelKey(LoginViewModel::class)
internal abstract fun bindLoginViewModel(loginViewModel: LoginViewModel): ViewModel
@Binds
internal abstract fun bindViewModelFactory(factory: AuthViewModelFactory):
ViewModelProvider.Factory
}
@Module
internal abstract class UserViewModelModule {
@Binds
@IntoMap
@ViewModelKey(LeadViewModel::class)
internal abstract fun bindLeadViewModel(leadViewModel: LeadViewModel): ViewModel
@Binds
internal abstract fun bindViewModelFactory(factory: UserViewModelFactory):
ViewModelProvider.Factory
}