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

时间:2019-04-06 11:53:42

标签: android dependency-injection dagger-2 dagger

我正在尝试将Dagger 2 DI应用于我们的多库模块项目(有30个模块,并且会不断增长),每个库模块都依赖build.gradle文件中的其他几个模块,例如: gradle实施项目(“: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])

问题是,我只介绍了两个库模块,现在已经很凌乱了。 管理如此规模的项目模块的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

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