这是用例,我想使用依赖注入来注入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{}