首页 > 解决方案 > 封装子组件

问题描述

我已经阅读了关于Dagger Subcomponents for Encapsulation的段落至少 30 次,但我仍然无法理解这里发生的事情。将数据库实现细节放入子组件然后通过父组件访问它的目的是什么?从中可以得到什么?这类似于“类固醇模块”吗?子组件是否仍会直接使用,还是一切都通过 ApplicationComponent 运行?

请注意,我知道这个现有的问题。但这不是一个方法问题,我想知道这个结构的逻辑和目的,需要有人用可以理解的术语来解释它。

@Singleton
@Component(modules = DatabaseModule.class)
interface ApplicationComponent {
  Database database();
}

@Module(subcomponents = DatabaseComponent.class)
class DatabaseModule {
  @Provides
  @Singleton 
  Database provideDatabase(
      @NumberOfCores int numberOfCores,
      DatabaseComponent.Builder databaseComponentBuilder) {
    return databaseComponentBuilder
        .databaseImplModule(new DatabaseImplModule(numberOfCores / 2))
        .build()
        .database();
  }
}

@Module
class DatabaseImplModule {
  DatabaseImplModule(int concurrencyLevel) {}
  @Provides DatabaseConnectionPool     provideDatabaseConnectionPool() {}
  @Provides DatabaseSchema provideDatabaseSchema() {}
}

@Subcomponent(modules = DatabaseImplModule.class)
interface DatabaseComponent {
  @PrivateToDatabase Database database();
}

标签: androiddependency-injectiondagger-2dagger

解决方案


推荐阅读