Я создаю приложение для Android, следуя принципам чистой архитектуры. Вот что у меня есть:
модуль приложения:
- Содержит все зависимости Android.
- Использует MVVM с ViewModel из компонентов арки.
- ViewModels взаимодействует только с прецедентами, которые вводятся конструктором.
модуль сценария использования:
- Содержит все варианты использования.
- Сценарии использования взаимодействуют только с репозиториями, которые вводятся конструктором.
модуль репозитория:
- Содержит все репозитории.
- Репозитории взаимодействуют с веб-службами или базами данных и т. Д.
- У меня есть интерфейс Retrofit, определенный на этом уровне, который репозиторий принимает в своем конструкторе.
модуль данных:
- Содержит все модели данных
Я пытаюсь использовать Hilt для внедрения зависимостей в приложение. Я не хочу раскрывать Retrofit, OkHttp и т. Д. В модуле приложения, потому что я не хочу, чтобы разработчики могли помещать сетевой код в неправильный модуль. Помните, что модуль приложения использует ViewModel, который может говорить ТОЛЬКО о вариантах использования.
Как мне это настроить? Я попытался поместить модули кинжала в каждый из этих модулей, чтобы определить инъекцию, затем в основной модуль приложения я включил модуль из варианта использования:
@Module(includes = [UseCaseModule::class])
@InstallIn(ApplicationComponent::class)
object AppModule
но это не работает, поскольку он начинает жаловаться на то, что не может найти транзитивные зависимости в других модулях, которые я хочу скрыть.