我至少读过Dagger Subcomponents for Encapsulation一段,大约30遍,但是我仍然无法理解这里发生的事情。将数据库实现详细信息放入子组件然后通过父级访问它的目的是什么?从中可以得到什么?这有点像“类固醇模块”吗?子组件是否仍然可以直接使用,还是所有的组件都可以通过ApplicationComponent运行?
请注意,我知道this existing question。 但这不是一个如何解决的问题,我想知道这种结构的逻辑和目的,需要有人用易于理解的术语对其进行解释。
@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();
}