214 похожих чатов

Всем привет. У меня возник вопрос по внедрению зависимостей в

многомодульном проекте через dagger2, но сначала контекст: Разбираю пример из книги "dagger by tutorial". Там есть модуль, который предоставляет retrofit-класс. Этот модуль также предоставляет интерфейс конфигурации клиента (базовый url, размер кэша), который должен реализовать модуль, который будет использовать этот ретрофит-класс. В примере это :app модуль.
Так вот, в книге эта реализация внедрения конфигурации клиента сделана через атрибут dependencies ApplicationComponent. Плюс ко всему, для того, чтобы это решение заработало потребовалось добавить в функцию create Component.Factory реализацию этого интерфейса.
Автор не объясняет почему именно этот подход выбрал и мне он показался странным. Ведь можно убрать этот атрибут dependencies и добавить аннотацию @BindsInstance в Component.factory.create() и все также будет работать.
Сам вопрос - есть ли какая либо разница между добавлением обычного класса в граф зависимостей через dependencies и @bindsInstance?

15 ответов

62 просмотра

А новая книга? Есть вероятность, что на момент её написания в даггере ещё не было bindinstance

а, понял в чем вопрос. Думаю, что при использовании component dependenciesв граф добавляются все прописанные в этом компоненте биндинги, не нужно потом писать что-то типа networkConfiguration.okhttp. Вот здесь они хорошо описаны: https://dagger.dev/semantics/#:~:text=Component%20dependencies%20are%20simply%20syntactic%20sugar%20for%20a%20certain%20use%20case%20for%20bound%20instances.

Albert-Abdullin Автор вопроса
Alexey Illarionov
а, понял в чем вопрос. Думаю, что при использовани...

Я пытаюсь понять, но пока туго. Надо вникать мне, как всегда. Спасибо за ссылку

Albert Abdullin
Я пытаюсь понять, но пока туго. Надо вникать мне, ...

На скрине использование даггера не для android, а чистой java) для андроида класс App должен наследоваться от класса DaggerApplication

Юрий Лещенко
На скрине использование даггера не для android, а ...

не должен, DaggerApplication - это из мира dagger-android, он не обязателен, это один их подходов, который в целом был признан неудачным и переделан в hilt

Alexey Illarionov
не должен, DaggerApplication - это из мира dagger-...

Пруф об неудачности в студию? На таком подходе у нас куча проектов работает, включая и пос системы. Если люди не правильно его реализовывали это не значит неудачный подход, руки должны расти с плещей ))

Юрий Лещенко
Пруф об неудачности в студию? На таком подходе у н...

Здесь, например, разработчики рассказывали: https://youtu.be/o-ins1nvbDg?t=537 (ссылка из статьи Василия)

Alexey Illarionov
Здесь, например, разработчики рассказывали: https:...

Ну и так разберу статью по полкам 1.Статья 2019 года, когда пишут Даггер андроид мертв. Версия 2.47 вышла в прошлом мец 2. Автор пишет что разработчики DI хотели прийти к решению того что бы упростить новичкам его использование, и это не значит что он не удачен( упрощение его использование стоит в hilt) и то если начнем разбивать на компоненты в ручную у новичков думаю будут снова проблемы, я уже молчу про очистку ссылок про которые новички забывают, если их не чистить вам и хилт думаю не поможет с утечками памяти 3. Автор четко в статья подчеркивает что это его мнение, и много уважаемые его коллеги с ним не согласны.

Юрий Лещенко
Ну и так разберу статью по полкам 1.Статья 2019 го...

Версия даггера вышла, но ту часть, которая именно dagger-android же не развивают, она просто в режиме совместимости живет. А рекомендуют и разрабатывают хилт.

Я бы вообще не использовал DI фреймворки. В небольшом проекте уж точно.

А что ещё в MainActivity делать? Только DI и wiring. Ну можно в класс вынести.

Почему нет? Даггер живее всех живых, и много где используется, знать его полезно. Скорее всего в первую очередь хилт, чистый даггер сложен в управлении компонентами. Реальной пользы в пет проекте скорее всего будет мало, только для практики. Брать ли в большой продакшен - очень дело вкуса, кто-то любит даггер, кто-то коин, кто-то вообще без фреймворка делает зависимости.

Алексей Ершов
Версия даггера вышла, но ту часть, которая именно ...

https://javadoc.io/doc/com.google.dagger/dagger-android/latest/dagger/android/package-summary.html

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта