Dagger 不允许我在一个 class 中使用两个相同类型的对象

Dagger dosn't let me use two objects of the same type in a single class

我有这个 AppModule class,它包含三个函数:

@Singleton
@Provides
static FirebaseFirestore provideFirebaseFirestore() {
    return FirebaseFirestore.getInstance();
}

@Singleton
@Provides
static CollectionReference provideUsersCollRef(FirebaseFirestore db) {
    return db.collection("users");
}

@Singleton
@Provides
static CollectionReference provideBarsCollRef(FirebaseFirestore db) {
    return db.collection("bars");
}

我听说我可以使用某种命名方式,但我没有找到解决这个问题的方法。除此之外,我如何在我的片段代码中区分我注入的那些引用中的哪一个?提前致谢。


编辑:

@Inject
@Named("bars")
BarsDataSource(CollectionReference barsRef) {
    this.barsRef= barsRef;
}

没错。 dagger2 没办法决定提供哪一个吧?

一个可能的解决方案是使用 @Named 注释。您还必须在@Inject 中为它们命名。例如

@Named("users")
@Singleton
@Provides
static CollectionReference provideUsersCollRef(FirebaseFirestore db) {
    return db.collection("users");
}

@Named("bars")
@Singleton
@Provides
static CollectionReference provideBarsCollRef(FirebaseFirestore db) {
    return db.collection("bars");
}

 @Named("bars")
 @Inject
 public CollectionReference bars;

或使用构造函数注入

@Inject
BarsDataSource(@Named("bars") CollectionReference barsRef) {
    this.barsRef= barsRef;
}