使用Dagger2与Kotlin过程中遇到的问题

以下只是记录在项目中遇到的坑,异常出现的原因可能是这个但不限于只是这个。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值