我正在尝试在不同片段之间共享相同的ViewModel。我用@PerFragment注释了它:
@PerFragment class LoginViewModel @Inject constructor(val authenticationApi: AuthenticationApi) : ViewModel() {
...
我不确定在哪里还可以设置自定义范围?
在我的活动中,我有这个模块(没有子组件),向我提供带有@PerFragment注释的电子邮件片段:
@dagger.Module class Module {
@Provides @PerFragment fun splashEntryFragment(): SplashEntryFragment {
return SplashEntryFragment()
}
@Provides @PerFragment fun emailFragment(): EmailFragment {
return EmailFragment()
}
}
在我的电子邮件登录片段中,我只有一个提供下一个片段的模块(没有子组件):
@dagger.Module class Module {
@Provides @PerFragment fun passwordFragment(): PasswordFragment {
return PasswordFragment()
}
}
我所有的活动和片段都使用绑定模块,如下所示:
@Module abstract class ActivitiesBindingModule {
// Activities
@ContributesAndroidInjector(modules = [SplashActivity.Module::class]) abstract fun splashActivity(): SplashActivity
@ContributesAndroidInjector(modules = [MainActivity.Module::class]) abstract fun mainActivity(): MainActivity
}
@Module abstract class FragmentBindingModule {
@ContributesAndroidInjector(modules = [SplashEntryFragment.Module::class]) abstract fun splashFragment(): SplashEntryFragment
@PerFragment @ContributesAndroidInjector(modules = [EmailFragment.Module::class]) abstract fun emailFragment(): EmailFragment
@PerFragment @ContributesAndroidInjector(modules = [PasswordFragment.Module::class]) abstract fun passwordFragment(): PasswordFragment
@ContributesAndroidInjector(modules = [FeedFragment.Module::class]) abstract fun feedFragment(): FeedFragment
}
仍然-为每个片段获取一个新的LoginViewModel。有什么问题吗?