匕首模块依赖于另一个模块



我是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 ...
    }
}

CCD_ 2的Url是CCD_,但我希望ClassCModuleClassDModule能够为ClassAModule提供不同的Url我应该如何处理?

要获得任何模块的特定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 {
    }

前两个提供程序方法定义了两个差异类的WordDataSource实例,并使用两个不同的注释@Room@Firestore进行定义。

要在WordRepository中获得两个不同的WordDataSource,您刚刚在其构造函数使用了@Room@Firestore注释

享受dagger的注释能力。:(如果您需要我提供更多详细信息,请随时联系。

最新更新