Binds vs Provides в Dagger 2
#разработка
Какая разница между Binds и Provides в Dagger 2? Это один из самых частых вопросов на собеседованиях, связанных с Dagger 2. И мне бы хотелось попробовать дать вам более-менее полное объяснение, которое я нашел и использую при ответе.
Первое отличие заключается в том, каким образом каждая из них «предоставляет» зависимости.
Provides может содержать в своем методе больше, чем один параметр, и возвращает реализацию того элемента, который нам нужен.
Binds же может принимать только один параметр, причем этот параметр — реализация того класса, который нам нужен, а возвращаемым параметром является интерфейс данного класса.
Кроме того, можно добавить, что с Provides используется обычный метод, а с Binds — абстрактный.
Вторым отличием является количество генерируемого кода в проекте.
Если посмотреть на то, что генерируется при добавлении этой аннотации, то видно добавление
Подробнее про сравнение этих двух аннотаций можно почитать в этой статье.
Есть ли еще какие-то отличия?
Будет здорово, если вы добавите их в комментариях.
#разработка
Какая разница между Binds и Provides в Dagger 2? Это один из самых частых вопросов на собеседованиях, связанных с Dagger 2. И мне бы хотелось попробовать дать вам более-менее полное объяснение, которое я нашел и использую при ответе.
Первое отличие заключается в том, каким образом каждая из них «предоставляет» зависимости.
Provides может содержать в своем методе больше, чем один параметр, и возвращает реализацию того элемента, который нам нужен.
Binds же может принимать только один параметр, причем этот параметр — реализация того класса, который нам нужен, а возвращаемым параметром является интерфейс данного класса.
Кроме того, можно добавить, что с Provides используется обычный метод, а с Binds — абстрактный.
Вторым отличием является количество генерируемого кода в проекте.
Если посмотреть на то, что генерируется при добавлении этой аннотации, то видно добавление
MyModule_GetInjectClassFactory
, которой нет при использовании Binds, но есть при добавлении Provides.Подробнее про сравнение этих двух аннотаций можно почитать в этой статье.
Есть ли еще какие-то отличия?
Будет здорово, если вы добавите их в комментариях.