3

我想在我的应用程序中尝试 Hilt DI

我完成了将 Hilt 添加到我的应用程序的所有步骤,但我的问题是 hilt 在 My BaseFragment 中显示错误说:

错误:预期的 topLevelClass = BaseFragment<T, D>.class ^error: [Hilt]

BaseFragment 很简单:

@AndroidEntryPoint
abstract class BaseFragment<T : ViewModel,D : ViewDataBinding>() : Fragment() {

@Inject
lateinit var viewModel: T by viewModels()


 }

对于 viewModel by viewModels() not working 显示错误

不能使用“T”作为具体类型参数。改用一个类。'Lazy' 类型没有方法 'setValue(BaseFragment<T, D>, KProperty<*>, T)',因此它不能作为 var(读写属性)的委托。**

所以我像在 Dagger 中使用的那样使用 Factory,它可以工作,但仍然是我的问题

基本片段

感谢您帮助我并提前感谢

编辑:在 github 上打开 这个问题,他们说这是一个错误,他们将禁止 @AndroidEntryPoint 用于具有类型参数的基类 –</p>

4

1 回答 1

4

正如我在这里已经提到的,这可能是 Hilt 内部的一个错误。

检查相关的github问题:https ://github.com/google/dagger/issues/2042

您可以通过@AndroidEntryPoint从带参数的抽象类移动到不带类型参数的子类来解决此问题。

于 2020-08-14T13:40:33.957 回答