Dagger2 + ViewModel + Репозиторий

Я новичок в Dagger 2 и пытаюсь реализовать его в Котлине. Здесь я пытаюсь внедрить объект репозитория в модель представления. Я успешно могу ввести его таким образом

public class LoginViewModel @Inject constructor(var mApplication: Application, var repository: LoginRepository) :
ViewModel() {

Вот так выглядит мой репозиторий

 class LoginRepository @Inject constructor(val retrofit: APICallInterface) {

Вот так выглядит мой модуль

@Module
class BaseModule {

@Provides
fun getRetrofit(): APICallInterface {

    return Retrofit.Builder()
        .baseUrl("https://samples.openweathermap.org/data/2.5/")
        .addConverterFactory(GsonConverterFactory.create())
        .build().create(APICallInterface::class.java)
}

Чего я не могу понять, так это того, как Dagger 2 может предоставить объект для репозитория, поскольку я не упомянул об этом ни в одном модуле с аннотацией @Provides.

Я пытался следить за многими блогами и несколькими вопросами о stckoverflow, доступными здесь, но ни один из них не разрешает мои сомнения.

Любая помощь/объяснение будут оценены.

Вы объявили это в классе @Module?

Stanislav Bondar 25.06.2019 13:24

Нет. Добавление рассматриваемого класса модуля для ясности.

Harry Sharma 25.06.2019 13:42
0
2
99
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

What i am unable to understand is how Dagger 2 is able to provide an object for repository as i have not mentioned it in any module with @Provides annotation.

Вы используете внедрение конструктора, аннотируя конструктор с помощью @Inject:

[@Inject] Identifies injectable constructors, methods, and fields.

Таким образом, добавляя аннотацию, Dagger узнает о конструкторе и знает, как создать объект, когда это необходимо.

 class LoginRepository @Inject constructor(..)

Если в вашем конструкторе не будет аннотации тогда, вам понадобится @Provides аннотированный метод в модуле, чтобы Dagger мог получить доступ к зависимости, но вы должны использовать @Provides аннотированные методы в первую очередь для объектов, которые нуждаются в дополнительной настройке и/или инициализации.

Хорошо, понял, поскольку я тоже новичок в kotlin. Я пропустил, что сам помечаю конструктор LoginRepository с помощью @Inject. Спасибо за ответ

Harry Sharma 25.06.2019 15:20

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