gpt4 book ai didi

dagger-2 - 当每个接口(interface)有一个实现时,Dagger 中自动 @Binds

转载 作者:行者123 更新时间:2023-12-03 09:00:47 27 4
gpt4 key购买 nike

使用 Dagger 2 时,我经常应用以下模式:

  1. 创建接口(interface),我们称之为LoginService
  2. 使用构造函数注入(inject)创建唯一的一个实现 - LoginServiceImpl:

    class LoginServiceImpl implements LoginService {
    @Inject LoginServiceImpl() {}
    }
  3. 将实现绑定(bind)到接口(interface):

    @Binds
    abstract LoginService bindStatisticsService(LoginServiceImpl impl);
  4. 在本例中始终依赖于接口(interface) - LoginService

是否可以避免使用 @Binds 带注释的方法?是否有一种更简单(样板代码较少)的方法来告诉 Dagger - 这个类是接口(interface)的唯一实现,始终绑定(bind)它,例如在接口(interface)本身的一些注释中?

我已阅读文档,遗憾的是没有找到类似的内容,但也许有人知道一些可以解决我的问题的技巧。

最佳答案

我认为这是不可能的,即使是假设的。

Dagger 无法真正判断只有一种实现,唯一的方法是搜索(编译)类路径上的每个类,以尝试找到各种可能的实现。这充其量会很慢,但 Java 允许从自定义类加载器进行类加载,因此 you aren't ever really guaranteed to get a full list of available classes 。即使您声称 Dagger 应该只匹配它看到的第一个适当的可分配类型(因为您知道只有一个),Dagger 可能无法识别在哪里可以找到该实现类型。

最终,要改进单行 @Binds 语句来标识绑定(bind)键 (your.package.name.LoginService) 和目标 (your.package.name.LoginService) 的完全限定类.package.name.LoginServiceImpl)。

关于dagger-2 - 当每个接口(interface)有一个实现时,Dagger 中自动 @Binds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50612744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com