#dagger
#dagger
Вопрос:
На странице документации Dagger говорится:
Чтобы получить максимальную отдачу от проверки во время компиляции, создайте модуль, который включает в себя все модули вашего приложения.
Это оставляет некоторые вопросы, на которые нужно ответить:
- Каков на самом деле эффект от включения других модулей? (По крайней мере, кажется, что включенные модули не нужно создавать напрямую)
- Законно ли / возможно ли включать один модуль несколько раз разными модулями? Что произойдет тогда?
Ответ №1:
Документация нуждается в улучшении.
Includes — это буквальное включение — все методы @Provides включенных модулей, полностью транзитивно, собираются вместе и рассматриваются как (по сути) часть анализируемого модуля. Итак:
@Module(includes = BModule.class)
class AModule {
@Provides A provideA(...) { ... }
}
@Module
class BModule {
@Provides B provideB(...) { ... }
}
функционально идентично
@Module
class JointModule {
@Provides A provideA(...) { ... }
@Provides B provideB(...) { ... }
}
Кроме того, включение модуля разрушает дубликаты. Итак, если у вас есть:
@Module(includes = {BModule.class, CModule.class})
class AModule { ... }
@Module(includes = CModule.class)
class BModule { ... }
@Module
class CModule { ... }
это приведет к сбору привязок (удаленных из дублирования) из AModule
BModule
CModule
.