Я новичок в 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, доступными здесь, но ни один из них не разрешает мои сомнения.
Любая помощь/объяснение будут оценены.
Нет. Добавление рассматриваемого класса модуля для ясности.
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. Спасибо за ответ
Вы объявили это в классе
@Module?