如果模块范围已经是单例,是否需要使用匕首柄在函数之上添加 @Singleton?

Is it required to add @Singleton on top of a function using dagger hilt if the module scope is already singleton?

在下面的代码中,我有一个调用 @InstallIn(SingletonComponent::class) 的模块。所以这个模块的作用域就是应用作用域或者单例作用域)) 如果我要在模块内提供一些东西,我是否还需要用 singleton 注释该函数?

是的,您还必须使用单例来注释该函数。

@InstallIn(SingletonComponent::class) 意味着你可以在你的 @Provides 函数中使用单例,没有它你就不能使你的 @Provides 函数成为单例。在 hilt @Provides 函数中默认有 no-scope 所以如果你不使用单例注释你的 @Provides 函数,每次它将 return 新对象。

您可以使用以下代码轻松测试我的答案

var count = 0

class TestingClass() {
    init {
        count++
    }

    fun printCount() = println("count: $count")
}

@Module
@InstallIn(SingletonComponent::class)
class TestModule {

    @Provides
    @Singleton // without this count will increase every time you inject TestingClass
    fun provideTestClass(): TestingClass {
        return TestingClass()
    }
}