В приведенном ниже коде у меня есть модуль, в котором я вызываю @InstallIn(SingletonComponent::class). Так что областью действия этого модуля является область применения или область действия синглтона))
Если я предоставлю что-то внутри модуля, нужно ли мне также аннотировать эту функцию с помощью singleton?
Да, вы также должны аннотировать эту функцию с помощью синглтона.
@InstallIn(SingletonComponent::class)
означает, что вы можете использовать singleton в своих функциях @Предоставляет, без него вы не сможете сделать свои функции @Предоставляет singleton. В рукоятке функции @Предоставляет по умолчанию не имеют области действия, поэтому, если вы не аннотируете свою функцию @Предоставляет с помощью синглтона, каждый раз она будет возвращать новый объект.
вы можете легко проверить мой ответ с помощью приведенного ниже кода
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()
}
}
Нет, вы не можете сделать @Singleton без компонента Singleton, сборка gradle должна выдавать ошибку.
Можешь проверить, компилируется нормально. Я использовал @InstallIn(ActivityComponent::class). Может быть, они что-то изменили.
Возможно, вы используете старые версии, это выдает ошибку на моем компьютере.
Я использую последние версии. Может с IDE что-то не так) Проверю.
Да, должна быть такая ошибка: область действия с @dagger.hilt.android.scopes.ActivityScoped не может ссылаться на привязки с разными областями:
Я понимаю. Мне просто любопытно кое-что из вашего ответа. Без
SingletonComponentя все еще могу отметить свои функции как@Singleton. Например. использованиеActivityComponentпозволяет пометить функции как@Singleton. Он компилируется, но, возможно, это произойдет через исключение времени выполнения. Кстати, я думаю, это не будет иметь никакого эффекта. Только если буду инжектить одно и то же несколько раз из одной и той же активности, а такого случая найти сложно))