​​Binds vs Provides в Dagger 2

#разработка



Какая разница между Binds и Provides в Dagger 2? Это один из самых частых вопросов на собеседованиях, связанных с Dagger 2. И мне бы хотелось попробовать дать вам более-менее полное объяснение, которое я нашел и использую при ответе.



Первое отличие заключается в том, каким образом каждая из них «предоставляет» зависимости.

Provides может содержать в своем методе больше, чем один параметр, и возвращает реализацию того элемента, который нам нужен.

Binds же может принимать только один параметр, причем этот параметр — реализация того класса, который нам нужен, а возвращаемым параметром является интерфейс данного класса.

Кроме того, можно добавить, что с Provides используется обычный метод, а с Binds — абстрактный.



Вторым отличием является количество генерируемого кода в проекте.

Если посмотреть на то, что генерируется при добавлении этой аннотации, то видно добавление MyModule_GetInjectClassFactory , которой нет при использовании Binds, но есть при добавлении Provides.



Подробнее про сравнение этих двух аннотаций можно почитать в этой статье.



Есть ли еще какие-то отличия?

Будет здорово, если вы добавите их в комментариях.