子组件(无作用域)不能引用作用域绑定:@Singleton @Provides @org.jetbrains.annotations.NotNull

Ash*_*win 3 singleton android dagger dagger-2

我正在使用匕首 2.11

模块

@Module
class MyModule {
    @Provides
    fun provideString() : String = "yo"
    @Provides @Named("injector")
    fun provideInzectorString() : String = "named_injection"

    @Singleton @Provides //The error goes away if I remove @Singleton
    fun provideRepository() = Repository(Interceptor(),"")
}
Run Code Online (Sandbox Code Playgroud)

活动绑定模块

@Module
abstract class ActivityBindingModule {
    @ContributesAndroidInjector(modules = [MyModule::class])
     abstract fun suggestionActivity() : SuggestionsActivity

    @ContributesAndroidInjector(modules = [MyModule::class])
    abstract fun editSubscriptionActivity() : SubscribeActivity
}
Run Code Online (Sandbox Code Playgroud)

应用组件

@Singleton
@Component(modules = {
        AndroidInjectionModule.class,
        MyModule.class
})
interface AppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance
        Builder application(MyApplication application);

        AppComponent build();
    }

    void inject(MyApplication app);
}
Run Code Online (Sandbox Code Playgroud)

我在编译时收到此错误

SubscribeActivitySubcomponent (unscoped) may not reference scoped bindings:
      @Singleton @Provides @org.jetbrains.annotations.NotNull
Run Code Online (Sandbox Code Playgroud)

我见过这些解决方案12。两者都要求您注释@Singleton我已经在使用的 appcomponent 。我的代码有什么问题?

Dew*_*eed 6

问题是MyModule的范围(应用程序或单例)大于活动范围。

 @ContributesAndroidInjector(modules = [MyModule::class])
 abstract fun suggestionActivity() : SuggestionsActivity
Run Code Online (Sandbox Code Playgroud)

删除两个(modules = [MyModule::class])s 或定义活动特定模块。

你不需要MyModule这里。它是多余的,因为它已经包含在AppComponent.