我是DI和Dagger的新手。
我在Android项目中有此依赖关系图:
@Module(includes=[Module1, Module2, Module3]) ClassAModule
@Module(includes=[classAModule, Module4]) ClassBModule
@Module(includes=[ClassBModule]) ClassCModule
@Module(includes=[ClassBModule]) ClassDModule
Module3
的外观如下
@Module
class Module3 {
@Provides
fun provideUrl(): Url{
return ...
}
}
Module3
的网址是ClassAModule
所必需的,
但是我希望ClassCModule
和ClassDModule
能够为ClassAModule
提供不同的网址
我应该如何处理?
答案 0 :(得分:1)
要获取任何模块的特定网址,您需要在提供者方法上定义注释。
示例
@Provides
@Room
fun provideRoomWordDataSource(): WordDataSource {
return RoomWordDataSource()
}
@Provides
@Firestore
fun provideFirestoreWordDataSource(): WordDataSource {
return FirestoreWordDataSource()
}
@Singleton
class WordRepository
@Inject constructor(
@Room private val room: WordDataSource,
@Firestore private val firestore: WordDataSource
) : Repository<String, Word>(rx, rm), WordDataSource {
}
前两个 provider 方法定义了两个差异类的 WordDataSource 实例,并定义了两个不同的注释 @Room 和 @Firestore 。
要在 WordRepository 中获得两个不同的 WordDataSource ,只需使用 @Room 和 @Firestore 中的注释。
在Dagger中享受注释功能。 :) 如果您需要我提供更多详细信息,请放心。