代码之家  ›  专栏  ›  技术社区  ›  Ashwin

子组件(非作用域)不能引用作用域绑定:@Singleton@Provides@org。喷气式飞机。注释。NotNull

  •  3
  • Ashwin  · 技术社区  · 8 年前

    我用的是匕首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(),"")
    }
    

    活动绑定模块

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

    应用组件

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

    我在编译时遇到了这个错误

    SubscribeActivitySubcomponent (unscoped) may not reference scoped bindings:
          @Singleton @Provides @org.jetbrains.annotations.NotNull
    

    我已经看到了这些解决方案 1 和 2 .两者都要求您使用 @Singleton 我已经在做了。我的代码怎么了?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Dewey Reed    8 年前

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

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

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

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

    推荐文章