android - 如何在 Dagger Hilt 中获得 MVP?

标签 android dagger dagger-hilt

我无法使用 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 注释的方法。此类型支持成员注入(inject),但不能隐式提供。
代码本身:
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()
    }
}
MainModule.kt
@InstallIn(ActivityComponent::class)
@Module
abstract class MainModule {

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

    @Binds
    abstract fun bindPresenter(impl: MainPresenter): MainContract.Presenter
}
MotionApp.kt
@HiltAndroidApp
open class MotionApp : Application()
解决了!感谢您的帮助曼努埃尔体内!
https://github.com/riodext/AndroidDaggerHiltMVP

最佳答案

问题是您依赖于 Activity 的特定实现,并且代码中不满足依赖关系(即 MainActivity )。
您必须在同一模块中将其作为绑定(bind)提供:

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

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

关于android - 如何在 Dagger Hilt 中获得 MVP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63306914/

相关文章:

java - 使用 Dagger 注入(inject)通配符类型

java - Dagger - 错误 : annotation @AggregatedRoot is missing a default value for the element 'originatingRoot' --

android - ApplicationComponent 是否已弃用?

java - 按日期对 RecyclerView 进行排序

javascript - 如何判断android用户是否来自主屏幕应用程序

java - Dagger 可以在不注入(inject)子 Activity 类的情况下注入(inject)抽象 Activity 类吗?

android - dagger hilt android中的ActivityRetainedComponent @ActivityRetainedScope和ActivityComponent @ActivityScoped有什么区别

android - 禁用 com.android.systemui 是否安全?

android - Android 广播接收器的 IOS 等效项

android - 如何使 kapt gradle 任务显示 Kotlin 代码中的错误而不是生成的 Java 代码?