且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

使用HILT将存储库注入Android中的服务

更新时间: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 

    ...

}

因此,在您的情况下,您应该像这样在MyActivityMyService中注入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)。