android - 封装子组件
问题描述
我已经阅读了关于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();
}
解决方案
推荐阅读
- c++ - 有没有一种简单的方法可以从嵌入式 C++ GNU ARM 中的字符串解析浮点数?
- c# - 在 UWP 应用中检索设备上的本地存储量
- java - 如何使用 JSoup 解析和格式化 HTML 文件元素的内容?
- c# - 同一站点下的多个 IIS 相同应用程序的登录/注销问题
- android - 设置按钮内联和断线以适应不同的设备
- microsoft-graph-api - Microsoft Graph API 可以访问存储在 Exchange 服务器上的电子邮件吗?
- azureservicebus - 将 Azure 服务总线队列迁移到 C# 中的主题和订阅
- c# - 需要使用 MVC 中的表单验证从服务器端验证 DateTime
- javascript - Safari IOS 指针事件的解决方法(不支持)
- javascript - 显示正确 xlabel 的 ReactJS ApexChart 问题