我正在迁移到新的匕首android 2.11
所有设置都基于Google蓝图:MVP-Dagger。但我遇到此错误:
错误:(22,57)错误:@Binds方法必须只有一个参数 其类型可分配给返回类型
这一行:
@ActivityScoped
@Binds abstract PresenterFactory<MainContract.Presenter> providePresenterFactory(MainPresenter presenter);
主持人:
@ActivityScoped
public class MainPresenter extends BasePresenterImpl<MainContract.View>
implements MainContract.Presenter { public MainPresenter(String s) {..
} ... }
有人知道如何解决这个问题吗?感谢。
答案 0 :(得分:8)
错误消息解释了所有内容:
@Binds方法必须只有一个参数,其类型可分配给返回类型
您的@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
方法并不神奇。它们绑定一个类型(例如,接口)和该类型的实现,Dagger已经知道如何提供。
更新
您可以按照以下步骤将@Provides
转换为@Binds
:
MainPresenter
具有使用@Inject
注释的显式构造函数,并且Dagger 2可以在构造函数中提供依赖项。写:
@Binds
abstract MainContract.Presenter bindPresenter(MainPresenter mainPresenter);
答案 1 :(得分:0)
使用@Provides代替@Binds
答案 2 :(得分:0)
我有相同的例外,但情况不同。
这个异常对我有误导作用。添加后
kapt {
correctErrorTypes true
}
对build.gradle
我发现了真正的问题:
error: [ComponentProcessor:MiscError] dagger.internal.codegen.ComponentProcessor was
unable to process this class because not all of its dependencies could be resolved.
Check for compilation errors or a circular dependency with generated code.
和提示not all of its dependencies could be resolved
帮助我发现我没有将implementation project(path: ':repository')
添加到处理DI内容的build.gradle
模块的app
中。
希望这可以帮助其他有相同问题的人。