android - 如何在 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
解决方案
问题是您依赖于 Activity 的特定实现,并且MainActivity
代码中不满足依赖关系(即 )。
您必须在同一模块中将其作为绑定提供:
@InstallIn(ActivityComponent::class)
@Module
object MainActivityModule {
@Provides
fun bindActivity(activity: Activity): MainActivity {
return activity as MainActivity
}
}
推荐阅读
- javascript - 如何隐藏未选中的表单的输入字段并仅显示已选中的输入字段
- c# - 显示 RAZOR 页面而不是 JSON 格式(C#、WebService)
- python - 结帐或下订单后如何清空购物车?Django
- ios - 通过 Jenkins 执行 shell 获取 CFBundleShortVersionString 版本值
- c++ - 在现代 CMake 中设置全局选项?
- excel - 如何修复 Excel VBA 中对象“_global”错误的“范围”
- android - 我应该使用什么库来获取耳机按钮点击作为输入?
- c# - 如何在 ItemTemplate eval 上应用 CSS 类
- list - 从头开始定义列表函数而不是库函数
- reactjs - 如何在 laravel 中使用 react 的阅读器