Кинжал 2: предоставление зависимостей в модуле приложения против их внедрения

#android #dependency-injection #dagger-2

#Android #внедрение зависимостей #dagger-2

Вопрос:

Я пытался добавить Dagger 2 в свое приложение для Android. Насколько я понимаю, Dagger будет создавать мой объект (который я пытаюсь внедрить), если его зависимости предоставлены (в модуле) или они вводятся с использованием какой-либо формы инъекции (конструктор / метод).

Я хотел бы знать, есть ли разница между тем, когда зависимость должна быть предоставлена в модуле (скажем, в модуле приложения), и когда она вводится с помощью инъекции конструктора, и есть ли какое-либо правило, когда я должен что-то делать?

Ответ №1:

Оба они одинаковы. Внедрение конструктора в основном устраняет необходимость написания метода поставщика. Как правило, я в основном использую его для классов с конструктором без аргументов для упрощения внедрения, например, для классов Util.

Ответ №2:

На самом деле нет никакой разницы. Пока Dagger знает, как создать экземпляр, это все, что имеет значение.

Причина, по которой есть два способа сделать это, заключается в том, что у вас не всегда есть возможность использовать внедрение конструктора, например, если класс является частью используемой вами библиотеки, но у вас нет источника (и поэтому вы не можете добавить @Inject один из конструкторов).