更新时间:2022-06-21 22:51:49
从有关我们如何Inject dependencies into Android classes的文档中,我们可以了解到以下内容:
Hilt可以向具有@AndroidEntryPoint批注的其他Android类提供依赖项。
Hilt目前支持以下Android类:
Application
(使用@HiltAndroidApp
)Activity
Fragment
View
Service
BroadcastReceiver
因此,当您将这些Android类中的任何一个子类化时,都不会要求Hilt通过构造函数注入依赖项。相反,您可以使用@AndroidEntryPoint
对其进行注释,并要求Hilt通过使用@Inject
注释该属性来注入其依赖项:
@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
@Inject
lateinit var mAdapter: SomeAdapter
...
}
因此,在您的情况下,您应该像这样在MyActivity
和MyService
中注入MyRepository
:
@AndroidEntryPoint
class MyService: Service() {
@Inject
lateinit var myRepository: MyRepository
...
}
@AndroidEntryPoint
class MyActivity: AppCompatActivity(R.layout.my_layout) {
@Inject
lateinit var myRepository: MyRepository
...
}
并记住:
Hilt注入的字段不能为私有
Hilt支持的Android类就是这样。
如果您想知道Hilt(例如:ContentProvider
)不支持的类怎么办?!我建议您学习本教程@EntryPoint annotation on codelab(也不要忘记查看文档了解如何Inject dependencies in classes not supported by Hilt)。