dagger-2 - 当每个接口有一个实现时,Dagger 中的自动 @Binds
问题描述
使用 Dagger 2 时,我经常应用以下模式:
- 创建接口,我们称之为
LoginService
创建唯一的一个实现 -
LoginServiceImpl
使用构造函数注入:class LoginServiceImpl implements LoginService { @Inject LoginServiceImpl() {} }
将实现绑定到接口:
@Binds abstract LoginService bindStatisticsService(LoginServiceImpl impl);
始终依赖于接口 -
LoginService
在这种情况下。
是否有可能避免使用带@Binds
注释的方法?是否有一种更简单(使用更少的样板代码)的方法来告诉 Dagger -这个类是接口的唯一一个实现,总是在接口本身的一些注释中绑定它?
我已经阅读了文档,不幸的是没有找到类似的东西,但也许有人知道一些可以解决我的问题的技巧。
解决方案
我认为这是不可能的,即使是假设性的。
Dagger 无法真正判断只有一个实现,唯一的方法是搜索(编译)类路径上的每个类以尝试找到各种可能的实现。这充其量会很慢,但是 Java 允许从自定义类加载器进行类加载,因此您无法真正保证获得可用类的完整列表。即使您声称 Dagger 应该只匹配它看到的第一个适当的可分配类型(因为您知道只有一个),Dagger 也可能无法确定在哪里可以找到该实现类型。
最终,很难改进@Binds
识别绑定键 (your.package.name.LoginService) 和目标 (your.package.name.LoginServiceImpl) 的完全限定类的单行语句。
推荐阅读
- docker - 可以通过启动 docker 时传递的环境变量配置 kafka 连接器吗?或者 curl 是唯一的方法?
- reactjs - React & react-native monorepo:node_module 导入问题
- java - 如何从json中提取所有变量名?
- javascript - 在 Vuetify.js 中更改输入文件组件的颜色和图标
- git - TFS-git 单一存储库可以有两个不同的解决方案文件?
- javascript - 如何在全日历js中只显示一个上午和下午时间
- python - Charlieplexing 按钮提供额外的输出
- python - 将具有 0 的行替换为列的均值/
- javascript - 循环数:将一个数字除以另一个数字时如何获得一个非四舍五入的循环数?
- python - 正则表达式仅在成对括号后对字符进行正向前瞻