问题描述
我想在我的应用程序中尝试Hilt DI
我已完成所有将Hilt添加到我的应用程序的步骤,但我的问题是Hilt显示My BaseFragment中的错误 说:
错误:预期
topLevelClass = BaseFragment
BaseFragment很简单:
@AndroidEntryPoint
abstract class BaseFragment<T : ViewModel,D : ViewDataBinding>() : Fragment() {
@Inject
lateinit var viewModel: T by viewModels()
}
并且对于viewModel 的viewModels() 不起作用,向我显示错误
不能使用'T'作为化类型参数。改用一个类。类型 '惰性'没有方法'setValue(BaseFragment
,KProperty , T)',因此它不能用作var(读写)的委托。 属性)。**
所以我像在Dagger中一样使用Factory,它可以工作,但仍然是我的问题
BaseFragment
感谢您的帮助,在此先感谢
编辑: 在github上对此issues进行操作,他们说这是一个错误,他们将禁止@AndroidEntryPoint使用具有类型参数的基类–
解决方法
正如我已经提到的here,这可能是Hilt内部的错误。
检查相关的github问题:https://github.com/google/dagger/issues/2042
您可以通过将@AndroidEntryPoint
从带有参数的抽象类移到没有类型参数的子类中来解决此问题。