使用Dagger2提供类型与params得到错误“无法提供没有@Annex-annotated方法”的意思

时间:2018-02-09 21:02:56

标签: android kotlin dagger-2

这是用例,我想使用依赖注入来注入infiniteScrollListener,如何编写@Provide InfiniteScrollListener?

var infiniteScrollListener: InfiniteScrollListener? = null
override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    infiniteScrollListener = InfiniteScrollListener(
            {
                presentor.pullDataFromRemoteServer()
            },
            linearLayout)

    addOnScrollListener(infiniteScrollListener)

    ……
}

编辑:也许问题是如何提供一个带有函数参数的类型(特别是在kotlin这里),以及一个Android类型的LinearLayoutManager的参数? LinearLayoutManager将是片段的onCreateView()生成的特定实例。

尝试创建一个模块,该模块可以提供一种InfiniteScrollListener类型以及函数类型和其他类型的参数。

构建时,出现错误:

    Error [com.example.application.DI.componenet.PresentorComponent.getInfiniteScrollListener()] @javax.inject.Named("func") kotlin.jvm.functions.Function0<kotlin.Unit> cannot be provided without an @Provides-annotated method.

Error:[com.example.application.DI.componenet.PresentorComponent.getInfiniteScrollListener()] @javax.inject.Named("layoutManager") android.support.v7.widget.LinearLayoutManager cannot be provided without an @Provides-annotated method.

不确定“如果没有@Annex-annotated方法”,“无法提供”是什么意思?

@ViewScope
@Subcomponent(modules = arrayOf(PresentorModule::class))
interface PresentorComponent {

    fun inject (fragment: ArtFragment)

    fun getInfiniteScrollListener(): InfiniteScrollListener
}

@Module
class PresentorModule() {

    @Provides
    @ViewScope
    fun infiniteScrollListener(func: () -> Unit, layoutManager: LinearLayoutManager) : InfiniteScrollListener {
        return InfiniteScrollListener(func, layoutManager)
    }
}


class InfiniteScrollListener (@param:Named("func") val func: () -> Unit,
                          @param:Named("layoutManager") val layoutManager: 
LinearLayoutManager) : RecyclerView.OnScrollListener() {

    init{}

0 个答案:

没有答案
相关问题