Модуль кинжала зависит от другого модуля - PullRequest
0 голосов
/ 05 марта 2020

Я новичок в DI и Dagger.

У меня есть этот график зависимостей в проекте Android:

@Module(includes=[Module1, Module2, Module3]) ClassAModule

@Module(includes=[classAModule, Module4]) ClassBModule

@Module(includes=[ClassBModule]) ClassCModule

@Module(includes=[ClassBModule]) ClassDModule

Вот как Module3 выглядит как

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Было бы '1011 *', но я хочу, чтобы ClassCModule и ClassDModule могли предоставить различный Url ClassAModule.

1 Ответ

1 голос
/ 05 марта 2020

Чтобы получить спецификацию c 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.

Чтобы получить два разных WordDataSource в WordRepository , только что использованных @ Room и @ Firestore аннотация в конструкторе .

Наслаждайтесь мощью аннотаций в Dagger. :) Пожалуйста, не стесняйтесь, если вам нужна более подробная информация от меня.

...