我从未在使用 Hilt 时看到在模块类中注入构造函数。我尝试使用,没有收到任何错误。当我们注入改造时,我们使用对象类。但我们可以使用普通类和注入构造函数关键字来创建模块类的对象。我的意思是像下面的代码。为什么我们不应该像下面这样编码?
@Module
@InstallIn(SingletonComponent::class)
class NetworkModule @Inject constructor () {
@Provides
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://example.com")
.build()
}
}
因为这毫无意义。它不会抛出错误,而且运行良好,但没有理由这样做。
@Inject 的目的之一是告诉 Hilt 该类可以注入到某个地方,使其成为依赖项。将它与 @Module 类一起使用是没有意义的,因为在大多数情况下,您不会在代码中的任何地方注入 Hilt 模块类(我真的没有看到您会这样做的情况)。
您也不会向模块类中注入任何东西,因为它是仅 Hilt 使用的类,并且它已经在 @Module 和 @InstallIn 注释中拥有所需的所有信息。
话虽如此,这样做只会让看到代码的人感到困惑,想知道模块类将被注入到项目的哪个位置。
正如前面所说,只有 Hilt 会使用这个类,并且只需要它的一个实例,这就是为什么它最好是一个对象,代表一个静态实例。