我正在迁移到新的 dagger android 2.11
所有设置均基于 Google 蓝图:MVP-Dagger。但我遇到此错误:
Error:(22, 57) error: @Binds methods must have only one parameter whose type is assignable to the return type
在这一行中:
@ActivityScoped
@Binds abstract PresenterFactory<MainContract.Presenter> providePresenterFactory(MainPresenter presenter);
主持人:
@ActivityScoped
public class MainPresenter extends BasePresenterImpl<MainContract.View>
implements MainContract.Presenter { public MainPresenter(String s) {..
} ... }
有人知道如何解决这个问题吗?谢谢。
最佳答案
错误信息解释了一切:
@Binds methods must have only one parameter whose type is assignable to the return type
你的 @Binds
方法的参数为 MainPresenter
.这不可分配给返回类型 PresenterFactory<MainContract.Presenter>
.换句话说,MainPresenter
不是 PresenterFactory<MainContract.Presenter>
的实例.
@Binds
的正确语法方法类似于:
@Binds
abstract Abstraction bindAbstration(Concretion concretion)
哪里concretion
是 Abstraction
的实例.
或者,在 Kotlin 中:
@Binds
abstract fun bindAbstraction(concretion: Concretion) : Abstraction
@Binds
方法不是魔术。它们绑定(bind)一个类型(例如,一个接口(interface))和该类型的实现,Dagger 知道如何提供。
更新
您可以转换您的 @Provides
至 @Binds
通过以下步骤:
- 确保
MainPresenter
有一个用@Inject
注释的显式构造函数并且 Dagger 2 可以在构造函数中提供依赖项。 写:
@Binds abstract MainContract.Presenter bindPresenter(MainPresenter mainPresenter);
关于java - @Binds 方法必须只有一个参数,其类型可分配给返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46656117/