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;
}
我有这个 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;
}