如果模块范围已经是单例,是否需要使用匕首柄在函数之上添加 @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()
}
}
在下面的代码中,我有一个调用 @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()
}
}