使用Dagger 2管理大型多库模块项目中的依赖项

问题描述 投票:0回答:1

我正在尝试将Dagger 2 DI实现到我们的多库模块项目(30个模块并且它将会增长),每个库模块依赖于build.gradle文件中的其他几个模块,例如:gradle implementation project(“:core “)。

我们有主模块:app,它包含应用程序类并包含每个库模块。

所以我决定在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])

问题是,我只覆盖了两个库模块,而且它已经很乱了。管理这么大的项目模块的正确方法是什么?

android dependency-injection dagger-2 dagger
1个回答
0
投票

您正在调用应用程序级别上的所有组件。在应用程序级别使用所有组件是低效的。制作单独的组件并使用@scope表示法将组件的生命周期绑定到活动。

© www.soinside.com 2019 - 2024. All rights reserved.