📺 Курс по Dagger 2 clck.ru/VtY7d 🔗 Документация по Dagger Hilt dagger.dev/dev-guide 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast
Будьте очень осторожны с контекстом, так как хилт обворачивает контекст в свой врапер. При миграции нарвался на несколько багов из-за этого врапера. End-to-end тесты были отдельной головной болью. Пришлось переделывать инжект в апликейшин классе и создавать свои рулы для тестов.
Что касается передачи параметра во ViewModel @HiltViewModel class MainViewModel @Inject constructor(private val savedStateHandle: SavedStateHandle) : ViewModel { init { val param = savedStateHandle.get("param_key") } } Ну и, конечно, нужно запихнуть param_key с типом Long нравящимся способом.
Так как в дагере одно и тоже можно реализовать кучей разных способов, то отсюда следует вывод, даггер это путь самурая, у самурая нет цели, у самурая есть только путь.
А что плохого в том что, создавать функция внутри viewModel с параметром newsId:Long, и всю логику перенести с блока инициализация в функция, и вызвать её при необходимости ?
@@AndroidBroadcast я с вами согласен, но не вижу смысла создавать модуль для таких задач, тем более, когда этот объект часто меняется например передается с editext и.т.п
14:50 - делается это очень легко. Я бы показал как это сделать, но вот только всратый ютуб удаляет все ссылки на gist. И не только ссылки, а даже часть пути ссылки, в которой даже слэши я заменил на слова
У меня имеется старое монолитное приложение (все в одном модуле) полностью на Dagger2, моя задача обновить чат и вынести его как модуль. Но этот модуль должен работать как в старом приложении на Dagger2, так и в новом на Hilt. В модуле будет Dagger2. Но я нигде не могу найти подсказки, как внедрить library module на dagger в hilt app. Может у вас имеются полезные статьи?
Вы сможете только переиспользовать модули в таком случае, так как компоненты отличаются. Hilt не такой гибкий и лучше везде использовать Dagger, особенно в таком shared коде.
@@AndroidBroadcast Правильно ли я понимаю: получается я смогу в одном активити запросить зависимости предназначенные для другого активити, при том что обе активности находятся в разных гредл модулях. Это же обход инкапсуляции ради чего и создаются модули.
Нет, компонент это лишь API. Вам ещё его нужно создать и если вы будете использовать один и тот же инстанс то вы сможете доставить. Точно также как и с Dagger. Создавать компонент под каждую Activity не надо было никогда, только если вам надо делать разные Scope
А нужен ли вообще DI фреймворк если тестов не будет никогда в андроид проекте? Ведь DI фреймворк предполагает определенную архитектуру и даже логику приложения, что затрудняет разработку и поддержку
📺 Курс по Dagger 2 clck.ru/VtY7d
🔗 Документация по Dagger Hilt dagger.dev/dev-guide
🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast
Будьте очень осторожны с контекстом, так как хилт обворачивает контекст в свой врапер. При миграции нарвался на несколько багов из-за этого врапера.
End-to-end тесты были отдельной головной болью. Пришлось переделывать инжект в апликейшин классе и создавать свои рулы для тестов.
Еще не посмотрел, но ставлю лайк) Длинное видео в конце могу забыть)
Спасибо, очень ждал !
При использования навкомпонента можно аргумент во вьюмодели напрямую из SavedStateHandle дергать
навкомпонент не обязательно. и так можно
Это ловушка. Начните многомодульной проект с Dagger, это будет самый легкий старт
Что касается передачи параметра во ViewModel
@HiltViewModel
class MainViewModel @Inject constructor(private val savedStateHandle: SavedStateHandle) : ViewModel {
init {
val param = savedStateHandle.get("param_key")
}
}
Ну и, конечно, нужно запихнуть param_key с типом Long нравящимся способом.
Так как в дагере одно и тоже можно реализовать кучей разных способов, то отсюда следует вывод, даггер это путь самурая, у самурая нет цели, у самурая есть только путь.
Сразу лайк, спасибо!)
Версия хилта должна совпадать с версией даггера* оговорочка
супер, спасибо
Thank you ! Very useful!
Приходилось ли пользоваться Scabbard? Он рисует графы для дагера картианками
Спасибо! Видел когда-то его давно, но потерял ссылку.
Спасибо
А что плохого в том что, создавать функция внутри viewModel с параметром newsId:Long, и всю логику перенести с блока инициализация в функция, и вызвать её при необходимости ?
Лучше чтобы все обязательные параметры были известны заранее и были в конструкторе. Это лишь рекомендация. Вы можете следовать своему пути.
@@AndroidBroadcast я с вами согласен, но не вижу смысла создавать модуль для таких задач, тем более, когда этот объект часто меняется например передается с editext и.т.п
Спасибо! Как раз актуально для меня. Так а в целом что с не так с Koin?
Вернулся на Dagger я и рассказал почему ruclips.net/video/lo8SypkHBJk/видео.html
@@AndroidBroadcast сча посмотрим, спс!
koin в разы лучше, если проект на котлин.
Сними плиз видео про тестирование даггер.
Dagger тестировать не надо. Что именно надо осветить в вопросе использования его в тестах?
14:50 - делается это очень легко. Я бы показал как это сделать, но вот только всратый ютуб удаляет все ссылки на gist. И не только ссылки, а даже часть пути ссылки, в которой даже слэши я заменил на слова
Хотелость бы узнать, а Hilt потдерживает мультибиндинг? На офф сайте нет упоминания про этот механизвм для Hilt
Насколько я знаю да и никаких причин чтобы это было не так я не знаю
Значит недостаточно продебажили...
У меня имеется старое монолитное приложение (все в одном модуле) полностью на Dagger2, моя задача обновить чат и вынести его как модуль. Но этот модуль должен работать как в старом приложении на Dagger2, так и в новом на Hilt. В модуле будет Dagger2. Но я нигде не могу найти подсказки, как внедрить library module на dagger в hilt app. Может у вас имеются полезные статьи?
Вы сможете только переиспользовать модули в таком случае, так как компоненты отличаются. Hilt не такой гибкий и лучше везде использовать Dagger, особенно в таком shared коде.
а что за делегат by stringArgs?
Его исходники можно найти в коде на Github (ссылка в описании к ролику). Просто обернул получение строки из аргументов Fragment-a
только у меня ссылка "Курс по Dagger 2" не открывается?
Проверю
Хилт для каждой активити создает отдельный саб компонент или один на все активити?
Один на все
@@AndroidBroadcast Правильно ли я понимаю: получается я смогу в одном активити запросить зависимости предназначенные для другого активити, при том что обе активности находятся в разных гредл модулях. Это же обход инкапсуляции ради чего и создаются модули.
Нет, компонент это лишь API. Вам ещё его нужно создать и если вы будете использовать один и тот же инстанс то вы сможете доставить. Точно также как и с Dagger. Создавать компонент под каждую Activity не надо было никогда, только если вам надо делать разные Scope
14:29 Кирилл, на какие горячие клавиши ты показал вертикальные панели вкладкок?
Это было наведение курсора в область
@@AndroidBroadcast блин, не заметил) понятно
Коммент для продвижения
А нужен ли вообще DI фреймворк если тестов не будет никогда в андроид проекте?
Ведь DI фреймворк предполагает определенную архитектуру и даже логику приложения, что затрудняет разработку и поддержку
DI позволяет снизить связность между собой компонентов и легко подменять зависимости. Фактически это влияет на масшатибруемость и гибкость решения
Комментарий