首页 > 解决方案 > 如何在 Dagger Hilt 中获得 MVP?

问题描述

我无法使用 Model View Presenter(MVP) Hilt 方法编译代码。

我收到此错误: /MotionPoC/app/build/generated/source/kapt/debug/com/aria/motionpoc/di/MotionApp_HiltComponents.java:145:错误:[Dagger/MissingBinding] com.aria.motionpoc.coupon.MainActivity如果没有 @Inject 构造函数或 @Provides-annotated 方法,则无法提供。此类型支持成员注入,但不能隐式提供。

代码本身:

MainActivity.kt

@AndroidEntryPoint
class MainActivity : AppCompatActivity(), MainContract.View {

    @Inject
    lateinit var presenter: MainContract.Presenter

MainPresenter.kt

class MainPresenter @Inject constructor(
    private val view: MainContract.View
): MainContract.Presenter {

    override fun onViewCreated() {
        view.showList()
    }
}

主模块.kt

@InstallIn(ActivityComponent::class)
@Module
abstract class MainModule {

    @Binds
    abstract fun bindActivity(view: MainActivity): MainContract.View

    @Binds
    abstract fun bindPresenter(impl: MainPresenter): MainContract.Presenter
}

运动应用程序.kt

@HiltAndroidApp
open class MotionApp : Application()

解决了!感谢您的帮助曼努埃尔体内! https://github.com/riodext/AndroidDaggerHiltMVP

标签: androiddaggerdagger-hilt

解决方案


问题是您依赖于 Activity 的特定实现,并且MainActivity代码中不满足依赖关系(即 )。

您必须在同一模块中将其作为绑定提供:

@InstallIn(ActivityComponent::class)
@Module
object MainActivityModule {

    @Provides
    fun bindActivity(activity: Activity): MainActivity {
        return activity as MainActivity
    }
}

推荐阅读