Нужно ли добавлять @Singleton поверх функции с помощью рукояти кинжала, если область модуля уже является одноэлементной?

В приведенном ниже коде у меня есть модуль, в котором я вызываю @InstallIn(SingletonComponent::class). Так что областью действия этого модуля является область применения или область действия синглтона)) Если я предоставлю что-то внутри модуля, нужно ли мне также аннотировать эту функцию с помощью singleton?

Нужно ли добавлять @Singleton поверх функции с помощью рукояти кинжала, если область модуля уже является одноэлементной?

1
0
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Да, вы также должны аннотировать эту функцию с помощью синглтона.

@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()
    }
}

Я понимаю. Мне просто любопытно кое-что из вашего ответа. Без SingletonComponent я все еще могу отметить свои функции как @Singleton. Например. использование ActivityComponent позволяет пометить функции как @Singleton. Он компилируется, но, возможно, это произойдет через исключение времени выполнения. Кстати, я думаю, это не будет иметь никакого эффекта. Только если буду инжектить одно и то же несколько раз из одной и той же активности, а такого случая найти сложно))

Hayk Mkrtchyan 08.05.2022 15:16

Нет, вы не можете сделать @Singleton без компонента Singleton, сборка gradle должна выдавать ошибку.

Yunus Dilber 08.05.2022 15:19

Можешь проверить, компилируется нормально. Я использовал @InstallIn(ActivityComponent::class). Может быть, они что-то изменили.

Hayk Mkrtchyan 08.05.2022 15:22

Возможно, вы используете старые версии, это выдает ошибку на моем компьютере.

Yunus Dilber 08.05.2022 15:23

Я использую последние версии. Может с IDE что-то не так) Проверю.

Hayk Mkrtchyan 08.05.2022 15:26

Да, должна быть такая ошибка: область действия с @dagger.hilt.android.scopes.ActivityScoped не может ссылаться на привязки с разными областями:

Yunus Dilber 08.05.2022 15:28

Другие вопросы по теме