以下只是记录在项目中遇到的坑,异常出现的原因可能是这个但不限于只是这个。
1、问题=》A @Module may not contain both non-static and abstract binding methods
场景=》Module文件中同时包含了@Provides和@Binds关键字
例如:
@Module
abstract class DishesModule{
@ContributesAndroidInjector
abstract fun dishesFragment(): DishesFragment
@Provides
fun providerDishesAdapter(): DishesAdapter {
return DishesAdapter()
}
@Binds
abstract fun dishesView(dishesFragment: DishesFragment): DishesContract.View
@Binds
internal abstract fun layoutManager(linearLayoutManager: LinearLayoutManager): RecyclerView.LayoutManager
}
Answer:dagger2 里 如果@Model 注解的是抽象类时 @provides 标注的必须是静态方法,详情可见:https://www.jianshu.com/p/8a9cc465bced
@Module(includes = [DishesModule.Bindings::class])
object DishesModule{
@Module
interface Bindings{
@ContributesAndroidInjector
fun dishesFragment(): DishesFragment
@Binds
fun dishesView(dishesFragment: DishesFragment): DishesContract.View
@Binds
fun layoutManager(linearLayoutManager: LinearLayoutManager): RecyclerView.LayoutManager
@DishesScope
@Binds
fun dishesPresenter(presenter: DishesPresenter): DishesContract.Presenter
}
@Provides
@JvmStatic
fun providerDishesAdapter(): DishesAdapter {
return DishesAdapter()
}
}
2、Question: LinearLayoutManager cannot be provided without an @Inject constructor
场景=》创建Module文件将LinearLayoutManager对象提供出去,并使用@Named关键字进行横向与竖向的区分
例:
@Module
class LayoutManagerModules {
@Named("vertical")
@Provides
fun providesLinearLayoutManager(context: Context): LinearLayoutManager {
return LinearLayoutManager(context)
}
@Named("horizontal")
@Provides
fun providesHorizontalLinearLayoutManager(context: Context): LinearLayoutManager {
return LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
}
}
使用:
@Named("horizontal")
@Inject
lateinit var layoutManager:LinearLayoutManager
Answer:
@field:Named("horizontal")
@Inject
lateinit var layoutManager:LinearLayoutManager