在项目转kotlin的时候,使用dagger2遇到了上述问题。排查了一周,才把所有问题解决。在此做一个踩坑实践的记录。
1,如果dagger2使用正确的话,还是出现了上诉错误。那么很有可能是kotlin和dagger2混合使用,注解编译器还不是很完善,明明java代码可以编译通过,转过来之后dagger2怎么也编译不通过。
可供参考的问题一:
错误: [Dagger/MissingBinding] xxxx cannot be provided without an @Inject constructor or an @Provides-annotated method.
请检查一下 @Binds 和 @Provides 是否混合使用
如图

解决办法,把 abstract 的module 抽取出来作为抽象类单独使用
问题二:
@Qualifier 引起编译不通过

如上,如果两个返回的是相同的接口。必须要有一个不能用@Qualifier限定。。
解决方法:

如图,必须要有一个方法没有被qualifier修饰。或者把返回的接口替换成具体实现的类

注意:这里修改了之后,@Inject的地方也要做相应的改动
以上,感恩新技术
网友评论