首页 > 解决方案 > Dagger 2 Qualifier 在 Android 模块上的 Kotlin 中不起作用

问题描述

我正在尝试使用 Dagger2 提供 2 个 Firebase CollectionReference 对象

@Provides
@Singleton
@FirebaseSongsDatabaseReferenceNamed
internal fun provideUserSongsDatabaseSnapshotRef(dbRef: FirebaseFirestore): CollectionReference =
    dbRef.collection("users-songs")

@Provides
@Singleton
@FirebaseUserListDatabaseReferenceNamed
internal fun provideUsersListDatabaseRef(dbRef: FirebaseFirestore): CollectionReference =
    dbRef.collection("users-list")


@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.SOURCE)
annotation class FirebaseSongsDatabaseReferenceNamed(val value: String = "songs-by-user-data-reference")

@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.SOURCE)
annotation class FirebaseUserListDatabaseReferenceNamed(val value: String = "users-list-reference")

但是当我编译时,Dagger 因重复绑定错误而失败。

[Dagger/DuplicateBindings] com.google.firebase.firestore.CollectionReference is bound multiple times:
@Provides @Singleton @org.jetbrains.annotations.NotNull com.google.firebase.firestore.CollectionReference network.NetworkModule.provideUserSongsDatabaseSnapshotRef$network_debug(com.google.firebase.firestore.FirebaseFirestore)
@Provides @Singleton @org.jetbrains.annotations.NotNull com.google.firebase.firestore.CollectionReference network.NetworkModule.provideUsersListDatabaseRef$network_debug(com.google.firebase.firestore.FirebaseFirestore)

我的应用程序分为几个模块。我尝试在主模块中添加类似的代码,但那里没有出现错误。它只发生在子模块中。这是来自主模块的工作代码。

@Provides
@FirebaseLoginIntentNamed
fun provideFirebaseUILoginIntent(): Intent = AuthUI.getInstance()
    .createSignInIntentBuilder()
    .setAvailableProviders(firebaseLoginProviders)
    .build()

@Provides
@TestNamed
fun provideTestIntent(str: String): Intent = Intent(str)

@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.SOURCE)
annotation class FirebaseLoginIntentNamed(val value: String = "firebase-login-intent")

@Qualifier
@MustBeDocumented
@Retention(AnnotationRetention.SOURCE)
annotation class TestNamed(val value: String = "intent-test")

标签: androidkotlindependency-injectiondagger-2

解决方案


推荐阅读