Dagger 模块依赖于另一个模块
Dagger module depends on another module
我是 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
的 Url 是 ClassAModule
所必需的,
但我希望 ClassCModule
和 ClassDModule
能够提供不同的 Url 到 ClassAModule
我该如何处理?
要获得任何模块的特定 url,您需要在提供程序方法上定义 注释。
例子
@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 两个不同的实例 class 并且定义了两个不同的注解 @Room 和 @Firestore.
要在 WordRepository 中获取两个不同的 WordDataSource,刚刚使用了 @Room 和 @Firestore annotation 在其 constructor 中。
享受 Dagger 中的注释功能。 :)
如果您需要我提供更多详细信息,请随时联系我们。
我是 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
的 Url 是 ClassAModule
所必需的,
但我希望 ClassCModule
和 ClassDModule
能够提供不同的 Url 到 ClassAModule
我该如何处理?
要获得任何模块的特定 url,您需要在提供程序方法上定义 注释。
例子
@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 两个不同的实例 class 并且定义了两个不同的注解 @Room 和 @Firestore.
要在 WordRepository 中获取两个不同的 WordDataSource,刚刚使用了 @Room 和 @Firestore annotation 在其 constructor 中。
享受 Dagger 中的注释功能。 :) 如果您需要我提供更多详细信息,请随时联系我们。