Основы DI и Dagger, как работает, настройка в проекте

  Рет қаралды 66,229

Android Broadcast. Все об Андроид разработке

Android Broadcast. Все об Андроид разработке

Күн бұрын

Из урока вы узнаете про Dependency Injection, как работает Dagger, подключите его в проект
🔗 Каналы "Android Broadcast" taplink.cc/android_broadcast
🔗 Поддержать проект taplink.cc/android_broadcast/...
🔗 Документация по Dagger dagger.dev/dev-guide/
📺 Курс по Dagger 2 abdev.by/wP1
🔗 Код из примера abdev.by/6AT
Видео сделано при поддержке Лаборатории Касперского
#AndroidBroadcast #DaggerКурс #Dagger2 #DI #DependncyInjection #Hilt #DaggerHilt #КириллРозов #РозовКирилл
0:00 Вступление
1:02 Теория DI
1:57 Dagger 2
2:30 Как работает Dagger 2
3:43 Подключаем Dagger 2 в проект
5:14 Простейший пример использования Dagger
10:55 Как долго живёт компонент?
11:27 Использование Dagger в Android приложении
16:41 Заключение

Пікірлер: 207
@user-qp1yv7sr8r
@user-qp1yv7sr8r 3 жыл бұрын
Информативно, никакой воды, полезные практики на примере, да еще и бесплатно. Кирилл, в раю для тебя выделено отдельное место :)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Спасибо 😊
@MrLight363
@MrLight363 3 жыл бұрын
Просто вышка. То что надо и все по делу👍
@fliker2309
@fliker2309 3 жыл бұрын
Ждём продолжения!! Спасибо!
@Oleg_Bessonov
@Oleg_Bessonov 3 жыл бұрын
Спасибо, ждём продолжения!!!
@Stopkaaaa
@Stopkaaaa 3 жыл бұрын
Отличное видео получилось, жду продолжения! Спасибо👍
@dimaklekchyan
@dimaklekchyan 3 жыл бұрын
Отличный материал, спасибо!
@victorskurchik3233
@victorskurchik3233 3 жыл бұрын
Очень доступно! Качество на уровне! Благодарю)
@CEPVAHT
@CEPVAHT 3 жыл бұрын
Спасибо за урок, все понятно и без лишней информации
@user-ms1yy5mk2t
@user-ms1yy5mk2t 3 жыл бұрын
Спасибо за видео. Жду следующего)
@serhiiwin3276
@serhiiwin3276 3 жыл бұрын
Отличное начало!
@user-jr5hw4gx1y
@user-jr5hw4gx1y 3 жыл бұрын
Спасибо тебе Кирилл, это очень полезный курс
@luckytima2315
@luckytima2315 3 жыл бұрын
Отлично! Определено надо делать продолжение)
@ksz87
@ksz87 3 жыл бұрын
Отличнейший формат! Кратко и всё по делу. Спасибо за труд, Кирилл!
@s.a.3408
@s.a.3408 3 жыл бұрын
Это лучшее что я видел по этой теме!!! Спасибо!
@KabukiWarrior369
@KabukiWarrior369 3 жыл бұрын
Очень крутое и понятное объяснение, большое спасибо!
@TerebeninEP
@TerebeninEP 2 жыл бұрын
Урок отличный! Спасибо!
@andyousil910
@andyousil910 3 жыл бұрын
Идеальное объяснение, спасибо!
@Maribobah81
@Maribobah81 3 жыл бұрын
Кирилл, спасибо! Как всегда топчик!
@kirill6020
@kirill6020 3 жыл бұрын
Спасибо за видео! Ждем продолжение!
@Dtritus993
@Dtritus993 3 жыл бұрын
Спасибо за работу, было интересно 🤩😍
@GriNAME
@GriNAME 3 жыл бұрын
Лайк и коммент желательно сотворить всем!))
@user-we6si4mi3x
@user-we6si4mi3x 3 ай бұрын
Большое спасибо за урок!!!
@luyt2
@luyt2 Жыл бұрын
Отлично, на одном дыхании смотрится. Спасибо за качественный контентк
@user-by1id2ix4h
@user-by1id2ix4h 2 жыл бұрын
Спасибо за курс!
@user-cs4dl3kk8r
@user-cs4dl3kk8r 3 жыл бұрын
Лайк не глядя , спасибо огромное !
@user-yz6kl1cr3s
@user-yz6kl1cr3s 2 жыл бұрын
Интересно. Спасибо за лекцию
@codemachine19
@codemachine19 Жыл бұрын
Оооочень интересный урок. Спасибо большое, Кирилл. Появилось желание смотреть побольше твоего live coding content, потому что вижу очень много best practice for development. Thanks a lot =)
@user-dm1to5li1x
@user-dm1to5li1x 3 жыл бұрын
Молодец, Кирилл! Спасибо, Кирилл!
@MikhailGureev
@MikhailGureev 2 жыл бұрын
Большое спасибо, Кирилл.
@redfox6089
@redfox6089 3 жыл бұрын
Заранее лайк!!! Спасибо Вам!!!
@user-ky2bu1wl7n
@user-ky2bu1wl7n 2 жыл бұрын
Супер. спасибо за материал)
@azizbekrasulmetov9293
@azizbekrasulmetov9293 11 ай бұрын
Все четко, понятно просто супер!!!
@facece1
@facece1 3 жыл бұрын
Спасибо Кирилл!
@KudashovDev
@KudashovDev 2 жыл бұрын
Крутой материал, коротко и понятно)
@user-ww2gn6pw9q
@user-ww2gn6pw9q 3 жыл бұрын
Супер, спасибо!
@user-co8of2dl3d
@user-co8of2dl3d 3 жыл бұрын
Спасибо, все понятно и интересно!
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Спасибо. Вы даже не представляете как я рад этому
@antaki93
@antaki93 Жыл бұрын
Практическая часть супер наглядная 👍
@nickolasivantsov260
@nickolasivantsov260 3 жыл бұрын
Nice ) Просто и доступно!
@tera393
@tera393 2 жыл бұрын
Шикарно, спасибо
@user-fj3xb9yr4u
@user-fj3xb9yr4u 3 жыл бұрын
Каааеф, очень доходчиво
@jamesalexander1062
@jamesalexander1062 3 жыл бұрын
Круто, спасибо
@ramilskl
@ramilskl 2 жыл бұрын
Круто! Спасибо!
@maxsimpleapps
@maxsimpleapps 3 жыл бұрын
Отлично 🖖
@sergeynaksin5256
@sergeynaksin5256 3 жыл бұрын
Кирилл, вот прям красава. Хороший формат! Для начинающих прям огонь, всё в принципе доступно разложил.!
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Спасибо. Надеюсь следующий выпуск зайдёт не меньше! Там уже погружение в фичи
@ismirnoff
@ismirnoff Жыл бұрын
Спасибо!
@druce18
@druce18 3 жыл бұрын
Лайк, спасибо!
@user-fc9gt6dl2i
@user-fc9gt6dl2i 3 жыл бұрын
Ждём следующую часть
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Уже вышел весь курс!
@user-zo4ml2mg2s
@user-zo4ml2mg2s 3 жыл бұрын
лайк сразу)
@zokirjonqodirov6927
@zokirjonqodirov6927 2 жыл бұрын
спасибо большое👍👍
@user-not_defined
@user-not_defined 2 жыл бұрын
Спасибо большое
@user-fd5tc4nx3d
@user-fd5tc4nx3d 3 жыл бұрын
Лайк не глядя просто! Жаль, что нельзя еще один лайк после просмотра. Но вот комент напишу еще раз более подробно о своих впечатлениях!
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Супер! Жду ваш отзыв здорово поможет улучшать этот и будущие курсы
@user-te8um6ox9p
@user-te8um6ox9p 3 жыл бұрын
Ништяк!
@vladimirpustovit3782
@vladimirpustovit3782 3 жыл бұрын
Большое спасибо за курс! Как раз всё никак не разберусь, как правильно работать с даггером в многомодульном проекте.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Я вас как раз подготовлю к тому, чтобы это сделать лучше и пока как. Ребята из Лаборатории Касперского также поделятся своим опытом
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 📺 Курс по Dagger 2 clck.ru/ViWKV
@mrgagarinn
@mrgagarinn 3 жыл бұрын
Спасибо
@anmelnik
@anmelnik 3 жыл бұрын
кааайф, давай ещё)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Второй урок уже на канале
@user-gs8bs4ql3h
@user-gs8bs4ql3h 3 жыл бұрын
Если не трудно, было бы гораздо удобнее, если бы когда вы какие-то новые вещи рассказываете, выводить какую-то схему, где вы ее объясняете. На слух, иногда сложно составить всю картину происходящего. В данном ролике вроде бы все не так сложно, но думаю, было бы полезно.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
В будущих роликах практически теории и не будет, так что таких проблем не возникнет
@Tswet
@Tswet 3 жыл бұрын
Спасибо, хотелось бы больше теории
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Курс не хочется делать теоретическим, но обязательно пишите что хотите узнать лучше (только отдельным комментарием под видео, чтобы за него могли поголосовать люди)
@Tswet
@Tswet 3 жыл бұрын
@@AndroidBroadcast да просто бездумное копирование вашего кода тоже пользы много не принесет :( а с теорией может с умом бы копировали :) (хотя нет)
@Feivur
@Feivur 3 жыл бұрын
Спасибо, доходчиво и красиво изложено. В своё время отказался от Dagger в пользу Kodein, потому что Dagger показался неуклюжим, громоздким и overengeneered.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Какое впечатление складывается сейчас?
@Feivur
@Feivur 3 жыл бұрын
@@AndroidBroadcast Честно говоря, желания использовать не возникает. Выглядит страшно. Возникает недоумение, почему такой монстр популярнее других простых и компактных фреймворков. Но знать его в лицо надо, и твоё изложение очень помогает, жду следующие серии!
@user-tj2ho2ml2f
@user-tj2ho2ml2f 2 жыл бұрын
ну круто же
@axrorxojayodgorov3416
@axrorxojayodgorov3416 3 жыл бұрын
super
@axkov
@axkov 3 жыл бұрын
Спасибо за труд. Наверное, это лучшее видео среди ру-сегмента ютуба. Множество авторов статей по даггеру используют зависимость dagger-android, следует ли вообще пользоваться ею?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
dagger-android был раньше, но сейчас он уже deprecated и рекомендуется использовать Dagger Hilt dagger.dev/hilt/ и Jetpack Hilt d.android.com/jetpack/androidx/releases/hilt
@mitiaygorodov4939
@mitiaygorodov4939 3 жыл бұрын
Спасибо за видео, очень познавательно. Cреди примеров я находил очень много тех, которые связаны именно с классами моделей. Но неоднократно слышал, что можно при работе с сетью, передавать с помощью DI репозиторий во ViewModel и т.д. Очень хотелось бы увидеть пример того, как это делать правильно, а также применение DI не только в работе с данными, если это допустимо. Спасибо!
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Это первая лекция курса и я не хотел нырять с головой в реальный код, дальше будет погружение в Android код по современным стандартам Google и применение Dagger там
@mitiaygorodov4939
@mitiaygorodov4939 3 жыл бұрын
@@AndroidBroadcast Спасибо! Очень полезный курс, всё очень понятно.
@user-dk4ne4id5l
@user-dk4ne4id5l 3 жыл бұрын
Поменяйте, пожалуйста, звук переключения между темами в начале. Он какой-то резкий и громкий. По ушам сильно бьёт.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Окей, обратим внимание
@mrtwon8638
@mrtwon8638 3 жыл бұрын
@@AndroidBroadcast прошлое интро топ было, особенно музыка 👍
@petrushevandrey7481
@petrushevandrey7481 3 жыл бұрын
Спасибо, Надеюсь в будет объяснения как инжектить в классы в которых нет Context
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Так есть пример Repostiory. Context - такая же зависимость как и все остальные, разницы нет
@GHOST20095
@GHOST20095 3 жыл бұрын
Попробуй продублировать инфу по поводу второго видоса в описании к видео, либо в начале видоса вставить ее текстом, например. Многие смотрят не до конца, а лишь ту часть, которая им полезна и сразу вырубают видос без лайка и не понимают потом где продолжение курса)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Есть плейлист целый и выходят видосы. Тут я уже ничего не сделаю, если людям неинтересно
@PandaTop.
@PandaTop. 3 жыл бұрын
Залайкайте це відео )
@user-oc7py1vy6s
@user-oc7py1vy6s 3 жыл бұрын
Хотелось бы увидеть конкретные примеры зачем нужен Dagger. Какие проблемы имеет код, в котором не используется DI? Может быть примеры "реальных" useCase'ов? Я предполагаю что Dagger облегчает написание тестов. Хотелось бы увидеть насколько легче писать тесты с Dagger'ом и без него?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Таких убеждений я проводить не буду. В этом видео я объяснил зачем он нужен - ослабление связи между типами и масштабирование кодовой базы
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Вот тут всё можно почитать, там совсем просто говориться о Dagger в тестах dagger.dev/dev-guide/testing.html
@musicchannel7700
@musicchannel7700 3 жыл бұрын
Было бы хорошо если бы вы опираясь на свой опыт сделали тестовый проект несложный с применениям разных инструментов по типу того же Dagger 2/MVVM/ и т.д =)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Да, это будет ближе к концу курса
@Chekist2008
@Chekist2008 3 жыл бұрын
Спасибо за очередной крутой материал! А будет про коин?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Нет, про Koin отдельного ничего делать не собираюсь, так как не интересно. Разве что "Почему ч отказался от Koin в пользу Dagger"
@Chekist2008
@Chekist2008 3 жыл бұрын
@@AndroidBroadcast ну понятное дело что ран-тайм и все такое, но он же ведь однозначно проще для понимания чем даггер.
@user-qv7po6wv6o
@user-qv7po6wv6o 3 жыл бұрын
@@AndroidBroadcast помнится, первое видео на этом канале, которое я увидел, называлось "Почему Koin")
@Trecoolerok
@Trecoolerok 3 жыл бұрын
Хотелось бы подробное видео про lateinit. До сих пор не понимаю, что с ним не так. По-хорошему, jb должны были хорошо над ним поработать (как с object-классами), чтобы все было ок с ним.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Отдельного видео он очно не заслуживает, может если только в группе советов про Kotlin
@MarsIanin06
@MarsIanin06 3 жыл бұрын
Благодарю за видео, Кирилл! Каким образом AppComponent распознает метод где указан класс куда надо будет предоставить зависимость? Я так понимаю там под капотом проверка что если задается функция с любым названием, но с входным параметром (fun inject(activity: MainActivity)) , значит эта функция как раз и отвечает за требование предоставление зависимости, верно?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Процессор аннотаций находит все классы, которые помечены аннотациями Dagger и на этапе процессинга всё связывает
@MarsIanin06
@MarsIanin06 3 жыл бұрын
@@AndroidBroadcast Понял, спасибо!
@user-not_defined
@user-not_defined 2 жыл бұрын
насчёт inject -ирования активности не очень понял, обязательно её инжектировать в AppComponent? То есть если мы хотим заинжектить в любой класс не помеченный интерфейсом @Component то должны сам класс заинжектировать в AppComponent?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
В Componet и Subcomponent добавляются методы в которые можно будет выполнить inject зависимостей по вызову этого метода из сгенерированного компонента. Лучше выполнять inject через конструктор, тогда такие методы в Componet не понадобятся, но не у всех компонентов можно поменять конструктор. Например, стандартный компоненты Android (Activity, Service) требуют наличия конструктора по умолчанию и создаются его вызовом, а позже в onCreate() можно сделать inject зависимостей
@maleno4212
@maleno4212 3 ай бұрын
Здравствуйте, я правильно понимаю, что это нужно для того чтобы не хранить applicationContext в глобальной переменной? И управлять порядком сборки MainApp? Или я не так понял, в чем смысл DI. Можете, пожалуйста, объяснить, очень хочу использовать в своем проекте.
@user-uf5mr2xv9f
@user-uf5mr2xv9f 2 жыл бұрын
Целесообразно ли использовать dagger support?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Я так понял речь про Dagger Android. Его уже не рекомендуют использовать, а брать Hilt
@user-fb6rg5rw5q
@user-fb6rg5rw5q 3 жыл бұрын
Можно ли показывать примеры сразу схожие на реальные, т.е. вот в этой папке у нас компонент, тут в отдельных модули. Вот где в итоге должен быть Context.appComponent я не особо понимаю, а в остальном все доступно, спасибо.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Где вы поместите это расширение - неважно. Можно и без него обойтись, но оно продемонстрировано для удобства. Выносить его в отдельный файл было бы только расфокусом во время демонстрации кода
@andrey.shpilevoy
@andrey.shpilevoy 7 ай бұрын
Коллеги, вот у нас на фирме во всех проектах подключен и используется Dagger, но я за 4 года так и не понял зачем, какова его ценность в реальном мире?
@AndroidBroadcast
@AndroidBroadcast 7 ай бұрын
Тогда вам стоит лучше почитать про архитектуру софта и зачем нужен DI, либо пользоваться другим решением
@agentr227
@agentr227 2 жыл бұрын
📢Кто только начал учить Dagger 2 обратите внимание на версию Котлина в проекте. Почему? Потому что проекты на новых версиях Котлина работают с Даггером некорректно (Заработало с версией 1.4.32)
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
С какой именно версией?
@agentr227
@agentr227 2 жыл бұрын
@@AndroidBroadcast с 1.6, которая стояла у меня, но пишут, что такие проблемы с 1.5+ версиями котлин. Проект просто крашился при билде после того, как пытался заинджектить поле в Activity. (У друга аналогично всё было, проект нормально стал запускаться после смены версии кота на 1.4.32)
@oleg12395
@oleg12395 Жыл бұрын
Все огонь, но то ли Dagger поменялся, то ли я по невнимательности что-то пропустил, но у меня в упор не создается класс DaggerAppComponent
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Подключил kapt или apt и настроил с Dagger для генерации кода?
@oleg12395
@oleg12395 Жыл бұрын
@@AndroidBroadcast да, все огонь. Спасибо, с непривычки бывают застревания в таких простых вещах
@ramsesii821
@ramsesii821 2 жыл бұрын
Большое спасибо. У меня вопрос, чутка не понял А зачем проверять тип контекста при получении appComponent`a ? В коде when (this) { is MainApp -> appComponent else -> this.applicationContext.appComponent } Зачем проверять, если можно сразу вызвать this.applicationContext.appComponent ? Какое здесь отличие ? В любом же случае достанем тот же самый appComponent
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
applicationContext также вернет тип Context. Свойство appComponent существует только в типе MainApp, соответственно нам нужно получить переменную такого типа. is MainApp в when позволяет нам убедиться что текущий Context - это MainApp и автоматически выполняет cast
@user-vd8wv3vo8t
@user-vd8wv3vo8t 3 жыл бұрын
На одном из проектов использовал by lazy для получения компонента. Что думаете на этот счет?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Делегат lazy? Это случаем не Koin?
@user-vd8wv3vo8t
@user-vd8wv3vo8t 3 жыл бұрын
@@AndroidBroadcast нет не Koin. Например _val appComponent: AppComponent by lazy { DaggerAppComponent.create() }_. Тем самым ухожу от использования lateinit.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Я подумал ты про inject, а не создание AppComponent
@voicetv9048
@voicetv9048 Жыл бұрын
Возникли некоторые вопросы : почему вы расширили именно Сontext? Что если у нас будет несколько компонентов типо ActivityComponent, FragmentComponent расширить Context опять ? Нельзя ли создавать какой нибудь глобальный типизированный функция и в зависимости от типа вернуть нужные компонент ?
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Указывайте таймкод, я не понимаю про что вы говорите
@voicetv9048
@voicetv9048 Жыл бұрын
@@AndroidBroadcast 12:40 вы расширили Context при использовании даггер в андроид , про него и был вопрос !
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Это просто вспомогательная функции, вы можете написать свою какую угодно.
@scraplesh
@scraplesh 3 жыл бұрын
Посидел пару лет на коине, теперь хочу вернуться в даггер. Правда через хилт, но не суть.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Hilt тоже будет в курсе
@skoof175
@skoof175 3 жыл бұрын
Как работает @Inject? Через рефлексию?
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Нет. Суть Dagger не использовать рефлексию во время работы приложений и генерировать весь код заранее.
@garifzyanovrr
@garifzyanovrr 2 жыл бұрын
Кирилл привет, у меня не появляется DaggerAppComponent и как скомпилировать граф зависимости?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Причины может быть 2: не проставлены аннотации или не подключен процессор аннотаций (зависимости в Gradle через kapt или apt). Вопросы лучше задавать тут Android Broadcast t.me/android_broadcast_talks
@alexeyflyagin
@alexeyflyagin Жыл бұрын
Подскажите, была ли решена проблема у вас? Я уже и проверил все аннотации по тысячу раз и пробовал с kapt и c apt и пытался и так и этак, а все равно не генерируется ничего. Если решили проблему, не подскажете ли как мне ее решить?
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Пишите в t.me/android_broadcast_talks
@inquisitor4894
@inquisitor4894 Жыл бұрын
всё делал как в уроке, но не находит DaggerAppComponent
@inquisitor4894
@inquisitor4894 11 ай бұрын
Ответ прост: Нужно собрать проект, после проверить, должен появиться.
@badadinfanti4553
@badadinfanti4553 3 жыл бұрын
Если я создам объект в Application, а потом буду обращаться к нему из разных частей кода, например, из фрагментов - это же и есть "создать в одном месте", а обращаться отовсюду? Насколько я понимаю, даггер так и работает под капотом? Application - это же, по сути, единая точка входа в андроид приложение, то что живет на протяжении всего времени жизни запущенного приложения и точно существует в любой момент времени.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Не совсем так, это уже больше Service Locator. Также неправильно перегружать логикой Application класс и хранить всё на протяжении его жизни. То что вы описали рабочий подход, но DI имеет больше возможностей и независимости. Рекомендую почитать стать на тему сравнения
@user-kg7mp4jh6k
@user-kg7mp4jh6k Жыл бұрын
Почему может не генерироваться DaggerAppComponent?
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
- Не настроил процессор аннотаций (kapt для Kotlin) - Нужно чтобы был интерфейс AppComponent с аннотацией @Component - Скомпилировать проект (возможно лучше начисто)
@user-kg7mp4jh6k
@user-kg7mp4jh6k Жыл бұрын
добавил id("kotlin-android"), id("kotlin-kapt"), при билде дает A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction, stacktrace ничего внятного не говорит
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Посмотрите раздел зависимостей в Gradle. Это банальный вопрос - вы подключили процессор аннотаций, но нужнл с помощью него подключить dagqer compiler. Ну странице документации Dagger есть все это и я показывал в примере
@stanislavkorolev376
@stanislavkorolev376 3 жыл бұрын
лучше ведь binds использовать вместо provides
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Если есть возможность, то да. Подробнее об этом будет в следующем выпуске
@naronwaz7824
@naronwaz7824 2 жыл бұрын
Не не не первую зависимость я уже получил, больше не надо
@user-yd4si7yd3b
@user-yd4si7yd3b 3 жыл бұрын
в чем разница между lateinit var и private var _appComponent: AppComponent? = null internal val appComponent: AppComponent get() = checkNotNull(_appComponent) { "AppComponent isn't initialized" } в обоих случаях если не будет инициализации то будет ошибка только текст разный
@user-yd4si7yd3b
@user-yd4si7yd3b 3 жыл бұрын
просто не могу понять насколько сильная была боль, которая связана с lateinit, что каждый раз вы говорите о том, что лучше не использовать?) это же по факту тот же nullcheck.
@user-qt2gu2pm2m
@user-qt2gu2pm2m 3 жыл бұрын
При использовании lateinit требуется проверять с помощью метода isInitialized, что объект был проиницилизирован, что может сказаться на производительности Плюс не стоит забывать про UninitializedPropertyAccessException
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
По сути поведение конечное одинаковое, но мне не нравится что lateinit выкидывает непонятное исключение и порой разработчики им начинают увлекаться, даже там где это не надо. Моё правило - lateinit только где есть аннотация Inject (даже в Detekt есть такое правило)
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Если вы один, то контролировать это просто. Но вот на уровне команды правила нужны. Особенно я помню как наелся на нескольких проектах с крешами в проде из-за неоправданного использования lateinit, а понять по stack trace было невозможну исходную причину
@user-yd4si7yd3b
@user-yd4si7yd3b 3 жыл бұрын
@@user-qt2gu2pm2m проверять нужно, только если вы не уверены в том что переменная проинициализирована.
@EvgeniyGooDiBunakov
@EvgeniyGooDiBunakov 3 жыл бұрын
А как настроить такую тему в студии? ))
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Что именно?
@EvgeniyGooDiBunakov
@EvgeniyGooDiBunakov 3 жыл бұрын
@@AndroidBroadcast цвета
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Это стандартная темна тема Darcula + плагин plugins.jetbrains.com/plugin/10080-rainbow-brackets
@TheKostya29
@TheKostya29 3 жыл бұрын
А зачем когда есть уже инджект нам нужна проперти computer в интерфейсе AppComponent это избыточно, можно удалить.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
Это было лишь для примера
@TheKostya29
@TheKostya29 3 жыл бұрын
@@AndroidBroadcast я так и понял, но если на место новичка стать, кто-то может начать это делать у себя по аналогии
@user-hr2dk6jy1k
@user-hr2dk6jy1k 2 жыл бұрын
Я только начинаю знакомится с миром андройда, и у меня тут возникает вопрос: если activity, и иные примитивы андройда не предполагают чтобы в них что-то внедряли - почему не использовать подход service locator, тем более dagger как понимаю даёт возможность это делать через тот самый create или билдер...
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Activity - это лишь точка входа и она не подстраивалась под какие-то либы или фреймворки. Много компонентов требуют наличие конструктора по умолчанию (без параметров)
@user-hr2dk6jy1k
@user-hr2dk6jy1k 2 жыл бұрын
@@AndroidBroadcast пока я склоняюсь к тому, что пытаются впихнуть di в сущность которая своим интерфейсом показывает что все зависимости можно добавлять только через другой механизм. Но сообществу таки надо только чтобы было @inject initlater... Лучше бы гугл научил людей работать с состоянием, а не бороться с пересозданием зависимостей, когда activity пересоздалась...
@Feivur
@Feivur 3 жыл бұрын
На тему опроса, почему не велик интерес к роликам - да просто некогда. Нужна отдельная кружка чаю, чтобы сесть и посмотреть.
@AndroidBroadcast
@AndroidBroadcast 3 жыл бұрын
😔
@user-zz4uj1mr5f
@user-zz4uj1mr5f 11 ай бұрын
А как строить модуль если объект содержит примитивные типы или стринг? Или как я понял дагер вообще не нужен для этого т.к это не его компетенция т.к на контроллере у меня прога просто не компилировалась.
@AndroidBroadcast
@AndroidBroadcast 11 ай бұрын
С примитивными типами строить не получится, надо через типы-обертки примитивов или свои делать + лучше начать сразу использовать квалификаторы. На моем опыте все какие-то параметры оборачивались в один большой объекте конфига
@VoidObj
@VoidObj 2 жыл бұрын
13:30 А я пришел к рекурсии.. о_О
@VoidObj
@VoidObj 2 жыл бұрын
Теста ради заменил ваш else на else -> DaggerAppComponent.builder().contextModule(ContextModule(this)).build() и все взлетело. Понятное дело, что это ужас и так делать нельзя. Забавно..
@VoidObj
@VoidObj 2 жыл бұрын
ГОСПОДИЯИДИОТ... 🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️ Всего-то в манифесте забыл прописать.. А ведь говорили "Не забудьте прописать в манифесте"!
@aleksandrboyko1388
@aleksandrboyko1388 2 жыл бұрын
Не понимаю куче восхитительных отзывов. Начало нормально , но потом что-то намудрил, чёрт ногу сломит....
@user-fg3wl4xu9d
@user-fg3wl4xu9d 4 ай бұрын
kapt больше не актуален, рекомендуется миграция на ksp
@AndroidBroadcast
@AndroidBroadcast 4 ай бұрын
Dagger с KSP на момент написания комментария находится в экспериментальном статусе
@user-fg3wl4xu9d
@user-fg3wl4xu9d 4 ай бұрын
@@AndroidBroadcast у меня с kapt при добавлении в проект постоянно какие-то проблемы с версиями, а с ksp так легко всё прошло - быстро, как в первый раз)
@sfsd9507
@sfsd9507 Жыл бұрын
kzfaq.info/get/bejne/Z8p_psiXl8DegWw.html 10.09. появилась проблема. не видит DaggerAppComponent . 10 раз перепроверил код. ощущение что с тех пор чтото изменилось в гредле или не хватает чего то на уровне гредл проджекта. версия 2,44,2 + kapt {correctErrorTypes = true} тоже не помогло =(
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Класс генерируется вообще?
@sfsd9507
@sfsd9507 Жыл бұрын
@@AndroidBroadcast класс DaggerAppComponent не генерируется. при попытке его вписать ИДЕ предлагает только: DaggerCollections и DaggerGenerated. аннотации распознает, dagger.аннотацию импортирует в документе
@sfsd9507
@sfsd9507 Жыл бұрын
@@AndroidBroadcast так... завел. добавил к аннотации @Component аннотацию @Singleton, не знаю на сколько это верное решение
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Надо смотреть настройку проекта, а не только код
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
@@sfsd9507 Лучше задайте вопрос в t.me/android_broadcast_talks
Организация модулей. Типы Inject. Способы доставки зависимостей
25:18
Android Broadcast. Все об Андроид разработке
Рет қаралды 39 М.
Dagger Component, Subcomponent, Scope, Reusable
22:38
Android Broadcast. Все об Андроид разработке
Рет қаралды 26 М.
🌊Насколько Глубокий Океан ? #shorts
00:42
Неприятная Встреча На Мосту - Полярная звезда #shorts
00:59
Полярная звезда - Kuzey Yıldızı
Рет қаралды 7 МЛН
Как запускать задачи в фоне на Android. РАЗБОР
26:42
Android Broadcast. Все об Андроид разработке
Рет қаралды 3,7 М.
#1 Что такое корутина. Важные особенности || Курс по корутинам
16:40
Android Broadcast. Все об Андроид разработке
Рет қаралды 87 М.
Dagger 2 в многомодульном Android проекте
16:37
Android Broadcast. Все об Андроид разработке
Рет қаралды 16 М.
Jetpack Compose - будущее Android UI и убийца Fragment
22:57
Android Broadcast. Все об Андроид разработке
Рет қаралды 37 М.
Dagger в Android на практике с MVVM
32:41
Тимофей Коваленко
Рет қаралды 17 М.
Немультиплатформенные привычки Android-разработки
38:43
Android Broadcast. Все об Андроид разработке
Рет қаралды 7 М.
Новости мобильной разработки 2024.2
35:19
Android Broadcast. Все об Андроид разработке
Рет қаралды 3 М.
Dependency Injection | Внедрение зависимостей в C# и ASP.NET Core
50:38
Hisense Official Flagship Store Hisense is the champion What is going on?
0:11
Special Effects Funny 44
Рет қаралды 2,5 МЛН
ИГРОВОВЫЙ НОУТ ASUS ЗА 57 тысяч
25:33
Ремонтяш
Рет қаралды 319 М.
Secret Wireless charger 😱 #shorts
0:28
Mr DegrEE
Рет қаралды 2,5 МЛН