我对 Hilt 注入还比较新,刚开始将整个项目迁移到 DI。
它在几乎所有地方都能工作,但当涉及到 leanback presenter 时,我遇到了一个问题。我不知道这是否与 leanback 有关,还是只是 Hilt 的问题。
class LiveShowCardPresenter constructor(context: Context, listener: ShowCardViewListener, val hasVariableWidth: Boolean = false) : ShowCardPresenter(context, listener) {
override fun onCreateViewHolder(parent: ViewGroup): ViewHolder {
val viewholder = ViewHolder(LiveShowCardView(context, hasVariableWidth))
viewholder.prepareViewHolderForeground(context, settings.isATV)
return viewholder
}
...
}
abstract class ShowCardPresenter constructor(val context: Context, var listener: ShowCardViewListener?) : Presenter() {
@Inject lateinit var detailsRepository: DetailsRepository
@Inject lateinit var settings: BackendSettings
... }
@Singleton
class BackendSettings @Inject constructor(@ApplicationContext val context: Context) {
val isATV = true // TODO
以下错误发生了。
kotlin.UninitializedPropertyAccessException: lateinit property settings has not been initialized
at ch.netplus.tv.ui.presenters.ShowCardPresenter.getSettings(ShowCardPresenter.kt:43)
at ch.netplus.tv.ui.presenters.LiveShowCardPresenter.onCreateViewHolder(LiveShowCardPresenter.kt:23)
这意味着当调用settings.isATV时会崩溃,因为此时“settings”变量尚未初始化。我该怎么做才能及时完成注入?
谢谢!
val isATV = true
更改为val isATV get() = true
或fun getIsATV(): Boolean { return true}
。 - ltp