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 所必需的, 但我希望 ClassCModuleClassDModule 能够提供不同的 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 中的注释功能。 :) 如果您需要我提供更多详细信息,请随时联系我们。