Как использовать Dagger 2 для вставки полей в хранилище MVVM? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть приложение для Android, написанное на Kotlin, которое использует MVVM с шаблоном Repository.Я использую Dagger 2 для внедрения зависимостей в репозиторий, таких как службы SharedPreferences или Retrofit2.

При поиске в Интернете я всегда вижу, что в репозитории есть конструктор Injected, но я никогда не вижу эти введенные поля.Конечно, я мог бы переместить их всех в конструктор, но кажется неправильным иметь конструктор со значениями +5.Я понимаю, что внедренный конструктор позволяет мне внедрить сам репозиторий куда-нибудь.

Что я хочу знать, так это то, что внедрение таких полей является хорошей практикой.Я обычно вижу эти введенные поля только во фрагментах и ​​действиях.У меня было что-то похожее в моей ViewModel, но я должен был удалить его, чтобы иметь возможность его модульного тестирования.

Мой код:

open class Repository @Inject constructor(private val context: Context, var sharedPreferences: SharedPreferences) {

    @Inject
    internal lateinit var appAuthManager: AppAuthManager

    @Inject
    internal lateinit var siriusApiService: SiriusApiService

    @Inject
    internal lateinit var siriusAuthApiService: SiriusAuthApiService

    @Inject
    internal lateinit var credential: GoogleAccountCredential

    ...
}
...