使用@ContributesAndroidInjector的自定义范围

时间:2018-11-29 18:19:11

标签: android dependency-injection dagger subcomponent

我正在尝试在不同片段之间共享相同的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。有什么问题吗?

0 个答案:

没有答案