Управление зависимостями в большом мультибиблиотечном проекте с помощью Dagger 2 - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь внедрить Dagger 2 DI в наш проект с несколькими библиотечными модулями (30 модулей, и он будет расти), каждый библиотечный модуль зависит от нескольких других модулей в файлах build.gradle, например: gradleпроект внедрения (": core") .

У нас есть основной модуль : приложение , которое содержит класс приложения и включает в себя каждый модуль библиотеки.

Поэтому я решил, что в модуле будет один одноэлементный компонент: app , который будет включать все модули, как показано ниже.

@Component(modules = [
    AppModule::class,
    AndroidSupportInjectionModule::class,
    ViewModelFactoryModule::class,
    BusinessModule::class,
    BusinessRepositoryModule::class,
    BusinessDetailFragmentModule::class,
    BusinessCollectionVerticalFragmentModule::class
])
@Singleton
interface AppComponent {

    @Component.Builder
    interface Builder {
        @BindsInstance
        fun application(application: Application): Builder

        fun build(): AppComponent
    }

    fun inject(mainApplication: MainApplication)
}

Причина, по которой у меня 4 бизнес-модуляпотому что

  • BusinessModule - это абстрактный класс, который содержит все действия и модели представления в этом модуле библиотеки.

  • BusinessRepositoryModule предоставляет экземпляр репозитория (позже будет альтернативой фиктивному репозиторию).

  • Оставшимися двумя модулями являются фрагменты, которые включаются в действия в BusinessModule .. например: @ ContributesAndroidInjector (modules = [BusinessCollectionVerticalFragmentModule :: class])

Проблема в том, что я рассмотрел только два библиотечных модуля, и это уже грязно.Как правильно управлять модулями проекта такого размера?

1 Ответ

0 голосов
/ 08 апреля 2019

вы вызываете все компоненты на уровне приложения. Неэффективно использовать все компоненты на уровне приложения. создайте отдельный компонент и используйте нотацию @scope, которая свяжет жизненный цикл компонента с деятельностью.

...