匕首 - 错误:[匕首/地图键] 同一个地图键绑定了不止一次 - Android



我在我的项目中用dagger起诉,但得到我下面的错误:

error: [Dagger/MapKeys] The same map key is bound more than once for java.util.Map<java.lang.Class<?>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<?>>>
public abstract interface AppComponent extends dagger.android.AndroidInjector<dagger.android.DaggerApplication> {
^
@Binds @dagger.multibindings.IntoMap @dagger.multibindings.ClassKey(com.Courses.CoursesActivity.class) dagger.android.AndroidInjector.Factory<?> com.Courses.module.CoursesActivityProvider_CoursesActivity.bindAndroidInjectorFactory(com.Courses.module.CoursesActivityProvider_CoursesActivity.CoursesActivitySubcomponent.Factory)
@Binds @dagger.multibindings.IntoMap @dagger.multibindings.ClassKey(com.Courses.CoursesActivity.class) dagger.android.AndroidInjector.Factory<?> com.di.ActivityBuilder_BindCoursesActivity.bindAndroidInjectorFactory(com.di.ActivityBuilder_BindCoursesActivity.CoursesActivitySubcomponent.Factory)
java.util.Map<java.lang.Class<?>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<?>>> is injected at
dagger.android.DispatchingAndroidInjector(injectorFactoriesWithClassKeys, …)
dagger.android.DispatchingAndroidInjector<java.lang.Object> is injected at
dagger.android.support.DaggerAppCompatActivity.androidInjector
com.Courses.CoursesActivity is injected at
dagger.android.AndroidInjector.inject(T) [com.di.AppComponent → com.di.ActivityBuilder_BindCoursesActivity.CoursesActivitySubcomponent]
The following other entry points also depend on it:
dagger.android.AndroidInjector.inject(T) [com.di.AppComponent → com.di.ActivityBuilder_BindCoursesActivity.CoursesActivitySubcomponent → com.Courses.module.CoursesActivityProvider_CoursesActivity.CoursesActivitySubcomponent]

这是AppScoped

@Scope
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
annotation class AppScoped

CoursesActivityScope

@Scope
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
annotation class CoursesActivityScope

ActivityBuilder

@Module
abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = [CoursesActivityProvider::class])
abstract fun bindCoursesActivity(): CoursesActivity?
}

AppComponent

@AppScoped
@Component(modules = [
AndroidSupportInjectionModule::class,
AppModule::class,
ActivityBuilder::class])
interface AppComponent : AndroidInjector<DaggerApplication?> {
fun inject(app: App?)
override fun inject(instance: DaggerApplication?)
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application?): Builder?
fun build(): AppComponent?
}
}

AppModule

@Module
abstract class AppModule {
@Binds
abstract fun provideContext(application: Application?): Context?
}

App

import dagger.android.support.DaggerApplication;
@AppScoped
class App : DaggerApplication() {
override fun applicationInjector(): AppComponent? {
val appComponent = DaggerAppComponent
.builder()
.application(this)
?.build()
appComponent!!.inject(this)
return appComponent
}
}

这是我的Activity

@CoursesActivityScope
class CoursesActivity : DaggerAppCompatActivity(){
......
}

但是让我超越错误。

我把这个class编辑为:

@Module
abstract class ActivityBuilder {
@CoursesActivityScope
@ContributesAndroidInjector(modules = [CoursesActivityModule::class])
abstract fun bindCoursesActivity(): CoursesActivity?
}

最新更新