Dagger模块取决于另一个模块

时间:2020-03-05 12:25:27

标签: android dagger-2 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的网址是ClassAModule所必需的, 但是我希望ClassCModuleClassDModule能够为ClassAModule提供不同的网址 我应该如何处理?

1 个答案:

答案 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中享受注释功能。 :) 如果您需要我提供更多详细信息,请放心。