kotlin 为什么我不能实现(注入)一个接口到我的ViewModel中?

ix0qys7i  于 2023-03-09  发布在  Kotlin
关注(0)|答案(1)|浏览(133)

我对处理大型项目和依赖项非常陌生,但是我正在将一个位于Fragment中的接口移动到它自己的文件中,以便不依赖于最初容纳它的Fragment。
接口MarkerInteractionListener如下所示

interface MarkerInteractionListener {
    fun currentLocation(): Location?
    ...
}

我的MainActivity通过以下方式实现此接口:

class MainActivity : MarkerInteractionListener, ... {

    override fun currentLocation(): Loction? = getLastKnownLocation()
    ...
}

在将InteractionListener实现回其原始片段时,将按照以下方式完成:

@AndroidEntryPoint
class MyFragment {
    
    private var interactionListener: MarkerInteractionListener? = null
    
    override fun onAttach(context: Context) {
        super.onAttach(context)

        if (context is MarkerInteractionListener) {
            interactionListener = context
        } else {
            throw RuntimeException("$context must implement MarkerInteractionListener")
        }
    }
    
    // I can now call interactionListener?.currentLocation()
}

我不知道的是如何将该接口放入一个ViewModel中,该ViewModel将使用接口中的函数。

@HiltViewModel
class PointCreationViewModel @Inject constructor(
    private val interactionListener: MarkerInteractionListener,
    ...
) : ViewModel() {
    ...
    // I want to be able to call interactionListener.currentLocation()
}

这只会得到错误消息

MarkerInteractionListener cannot be provided without an @Provides-annotated method.

我的接口或者我的ViewModel中缺少了什么,不允许我注入接口来使用?这甚至可以被注入吗?有其他的方法吗?

ehxuflar

ehxuflar1#

必须在AppModule中提供MarkerInteractionListener

相关问题