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)
我见过这些解决方案1和2。两者都要求您注释@Singleton我已经在使用的 appcomponent 。我的代码有什么问题?
问题是MyModule的范围(应用程序或单例)大于活动范围。
@ContributesAndroidInjector(modules = [MyModule::class])
abstract fun suggestionActivity() : SuggestionsActivity
Run Code Online (Sandbox Code Playgroud)
删除两个(modules = [MyModule::class])s 或定义活动特定模块。
你不需要MyModule这里。它是多余的,因为它已经包含在AppComponent.