Должен ли я использовать @Singleton, object или оба с Dagger2 и Kotlin? - PullRequest
1 голос
/ 05 февраля 2020

Я делаю приложение, использующее Kotlin и Dagger2, пытаюсь следовать шаблону MVVM, но передо мной стоит дилемма, должен ли я использовать @Singleton, object или оба? И почему? Допустим, у меня есть класс RepositoryMovies, и я хочу получать один и тот же экземпляр каждый раз, согласно моим исследованиям, вы можете сделать это следующим образом:

@ Singleton (Dagger2 way)

@Singleton
class RepositoryMovies {
    TODO()
}

Объект (Kotlin способ)

object RepositoryMovies {
    TODO()
}

Оба

@Singleton
object RepositoryMovies {
    TODO()
}

И не поймите меня началось с синглетонов в Kotlin после "Java -Way". Буду признателен за вашу помощь. Большое спасибо.

1 Ответ

2 голосов
/ 05 февраля 2020

Внедрение object не имеет особого смысла, поскольку в kotlin object используется для имитации утилиты java classes, такой как java * Arrays или Collections classes. Одной из определяющих характеристик c таких классов является то, что они не связаны с какими-либо указанными c class в вашем проекте, их можно требовать и использовать где угодно.

С другой стороны, в большинстве практических Ситуация repository будет связана с указанным c class. Например, вы можете захотеть ввести UserRepository только в UserViewModel, потому что это единственное место, где вам нужен доступ к информации пользователя.

Что касается object и @Singleton, object по определению является singleton, поэтому пометка его @Singleton является избыточной и ничего не делает sh, пока вы не сделаете ее инъекционной с помощью @Provides function. где вы должны указать, как кинжал может создать instances этого класса?

В вашем первом примере маркировка класса @Singleton ничего не делает, если только он не является инъекционным. как состояние документов с @ Singleton . График будет использовать один экземпляр значения для всех своих клиентов.

...