为什么我们不应该在模块类中使用“@Inject构造函数”?

问题描述 投票:0回答:1

我在使用 Hilt 时从未见过在模块类中注入构造函数。我尝试使用并没有收到任何错误。当我们注入改造时,我们使用对象类。但是我们可以使用普通类并注入构造函数关键字来创建模块类的对象。我的意思是像下面的代码。为什么我们不应该像下面这样编写代码?

@Module
@InstallIn(SingletonComponent::class)
class NetworkModule @Inject constructor () {

    @Provides
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://example.com")
            .build()
    }
}
android kotlin dependency-injection dagger-hilt
1个回答
0
投票

因为它没有意义。它不会抛出错误并且工作正常,但没有理由这样做。

  1. @Inject 的目的之一是告诉 Hilt 该类可以注入到某个地方,使其成为依赖项。将它与 @Module 类一起使用是没有意义的,因为在大多数情况下,您不会在代码中的任何位置注入 Hilt 模块类(我真的没有看到您会这样做的任何情况)。

  2. 您也不会向模块类中注入任何内容,因为它是一个只有 Hilt 使用的类,并且它已经在 @Module 和 @InstallIn 注释中包含了所需的所有信息。

  3. 话虽这么说,这样做只会让那些看到代码的人感到困惑,想知道模块类将被注入到项目中的哪里。

正如已经说过的,只有 Hilt 会使用这个类,并且它只需要它的一个实例,这就是为什么它最好是一个对象,代表一个静态实例。

© www.soinside.com 2019 - 2024. All rights reserved.