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

2024 ж. 14 Мам.
65 333 Рет қаралды

Из урока вы узнаете про 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 Заключение

Пікірлер
  • Ждём продолжения!! Спасибо!

    @fliker2309@fliker23092 жыл бұрын
  • Очень доступно! Качество на уровне! Благодарю)

    @victorskurchik3233@victorskurchik32332 жыл бұрын
  • Спасибо, ждём продолжения!!!

    @Oleg_Bessonov@Oleg_Bessonov2 жыл бұрын
  • Это лучшее что я видел по этой теме!!! Спасибо!

    @s.a.3408@s.a.34082 жыл бұрын
  • Просто вышка. То что надо и все по делу👍

    @MrLight363@MrLight3632 жыл бұрын
  • Отличное видео получилось, жду продолжения! Спасибо👍

    @Stopkaaaa@Stopkaaaa2 жыл бұрын
  • Спасибо за урок, все понятно и без лишней информации

    @CEPVAHT@CEPVAHT2 жыл бұрын
  • Отличнейший формат! Кратко и всё по делу. Спасибо за труд, Кирилл!

    @ksz87@ksz872 жыл бұрын
  • Спасибо за видео. Жду следующего)

    @user-ms1yy5mk2t@user-ms1yy5mk2t2 жыл бұрын
  • Спасибо за видео! Ждем продолжение!

    @kirill6020@kirill60202 жыл бұрын
  • Информативно, никакой воды, полезные практики на примере, да еще и бесплатно. Кирилл, в раю для тебя выделено отдельное место :)

    @user-qp1yv7sr8r@user-qp1yv7sr8r2 жыл бұрын
    • Спасибо 😊

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • это да...

      @_o6571@_o65712 жыл бұрын
  • Отличный материал, спасибо!

    @dimaklekchyan@dimaklekchyan2 жыл бұрын
  • Спасибо тебе Кирилл, это очень полезный курс

    @user-jr5hw4gx1y@user-jr5hw4gx1y2 жыл бұрын
  • Отлично! Определено надо делать продолжение)

    @luckytima2315@luckytima23152 жыл бұрын
  • Спасибо за работу, было интересно 🤩😍

    @Dtritus993@Dtritus9932 жыл бұрын
  • Урок отличный! Спасибо!

    @TerebeninEP@TerebeninEP2 жыл бұрын
  • Отличное начало!

    @serhiiwin3276@serhiiwin32762 жыл бұрын
  • Кирилл, спасибо! Как всегда топчик!

    @Maribobah81@Maribobah812 жыл бұрын
  • Большое спасибо, Кирилл.

    @MikhailGureev@MikhailGureev2 жыл бұрын
  • Спасибо за курс!

    @user-by1id2ix4h@user-by1id2ix4h2 жыл бұрын
  • Интересно. Спасибо за лекцию

    @user-yz6kl1cr3s@user-yz6kl1cr3s2 жыл бұрын
  • Очень крутое и понятное объяснение, большое спасибо!

    @KabukiWarrior369@KabukiWarrior3692 жыл бұрын
  • Оооочень интересный урок. Спасибо большое, Кирилл. Появилось желание смотреть побольше твоего live coding content, потому что вижу очень много best practice for development. Thanks a lot =)

    @codemachine19@codemachine19 Жыл бұрын
  • Идеальное объяснение, спасибо!

    @andyousil910@andyousil9102 жыл бұрын
  • Супер. спасибо за материал)

    @user-ky2bu1wl7n@user-ky2bu1wl7n2 жыл бұрын
  • Молодец, Кирилл! Спасибо, Кирилл!

    @user-dm1to5li1x@user-dm1to5li1x2 жыл бұрын
  • Отлично, на одном дыхании смотрится. Спасибо за качественный контентк

    @luyt2@luyt2 Жыл бұрын
  • Лайк не глядя , спасибо огромное !

    @user-cs4dl3kk8r@user-cs4dl3kk8r2 жыл бұрын
  • Большое спасибо за урок!!!

    @user-we6si4mi3x@user-we6si4mi3xАй бұрын
  • Лайк и коммент желательно сотворить всем!))

    @GriNAME@GriNAME2 жыл бұрын
  • Крутой материал, коротко и понятно)

    @KudashovDev@KudashovDev2 жыл бұрын
  • Спасибо Кирилл!

    @facece1@facece12 жыл бұрын
  • Заранее лайк!!! Спасибо Вам!!!

    @redfox6089@redfox60892 жыл бұрын
  • Практическая часть супер наглядная 👍

    @antaki93@antaki93 Жыл бұрын
  • Все четко, понятно просто супер!!!

    @azizbekrasulmetov9293@azizbekrasulmetov92939 ай бұрын
  • Шикарно, спасибо

    @tera393@tera3932 жыл бұрын
  • Супер, спасибо!

    @user-ww2gn6pw9q@user-ww2gn6pw9q2 жыл бұрын
  • Nice ) Просто и доступно!

    @nickolasivantsov260@nickolasivantsov2602 жыл бұрын
  • Круто, спасибо

    @jamesalexander1062@jamesalexander10622 жыл бұрын
  • Каааеф, очень доходчиво

    @user-fj3xb9yr4u@user-fj3xb9yr4u2 жыл бұрын
  • Круто! Спасибо!

    @ramilskl@ramilskl2 жыл бұрын
  • Если не трудно, было бы гораздо удобнее, если бы когда вы какие-то новые вещи рассказываете, выводить какую-то схему, где вы ее объясняете. На слух, иногда сложно составить всю картину происходящего. В данном ролике вроде бы все не так сложно, но думаю, было бы полезно.

    @user-gs8bs4ql3h@user-gs8bs4ql3h2 жыл бұрын
    • В будущих роликах практически теории и не будет, так что таких проблем не возникнет

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Спасибо, все понятно и интересно!

    @user-co8of2dl3d@user-co8of2dl3d2 жыл бұрын
    • Спасибо. Вы даже не представляете как я рад этому

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Ждём следующую часть

    @user-fc9gt6dl2i@user-fc9gt6dl2i2 жыл бұрын
    • Уже вышел весь курс!

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Отлично 🖖

    @maxsimpleapps@maxsimpleapps2 жыл бұрын
  • спасибо большое👍👍

    @zokirjonqodirov6927@zokirjonqodirov69272 жыл бұрын
  • Спасибо!

    @d.mertsalov@d.mertsalov2 жыл бұрын
  • Лайк, спасибо!

    @druce18@druce182 жыл бұрын
  • лайк сразу)

    @user-zo4ml2mg2s@user-zo4ml2mg2s2 жыл бұрын
  • Спасибо большое

    @user-not_defined@user-not_defined2 жыл бұрын
  • Кирилл, вот прям красава. Хороший формат! Для начинающих прям огонь, всё в принципе доступно разложил.!

    @sergeynaksin5256@sergeynaksin52562 жыл бұрын
    • Спасибо. Надеюсь следующий выпуск зайдёт не меньше! Там уже погружение в фичи

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Спасибо, хотелось бы больше теории

    @Tswet@Tswet2 жыл бұрын
    • Курс не хочется делать теоретическим, но обязательно пишите что хотите узнать лучше (только отдельным комментарием под видео, чтобы за него могли поголосовать люди)

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast да просто бездумное копирование вашего кода тоже пользы много не принесет :( а с теорией может с умом бы копировали :) (хотя нет)

      @Tswet@Tswet2 жыл бұрын
  • Большое спасибо за курс! Как раз всё никак не разберусь, как правильно работать с даггером в многомодульном проекте.

    @vladimirpustovit3782@vladimirpustovit37822 жыл бұрын
    • Я вас как раз подготовлю к тому, чтобы это сделать лучше и пока как. Ребята из Лаборатории Касперского также поделятся своим опытом

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Спасибо

    @mrgagarinn@mrgagarinn2 жыл бұрын
  • Лайк не глядя просто! Жаль, что нельзя еще один лайк после просмотра. Но вот комент напишу еще раз более подробно о своих впечатлениях!

    @user-fd5tc4nx3d@user-fd5tc4nx3d2 жыл бұрын
    • Супер! Жду ваш отзыв здорово поможет улучшать этот и будущие курсы

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Ништяк!

    @user-te8um6ox9p@user-te8um6ox9p2 жыл бұрын
  • кааайф, давай ещё)

    @anmelnik@anmelnik2 жыл бұрын
    • Второй урок уже на канале

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Поменяйте, пожалуйста, звук переключения между темами в начале. Он какой-то резкий и громкий. По ушам сильно бьёт.

    @user-dk4ne4id5l@user-dk4ne4id5l2 жыл бұрын
    • Окей, обратим внимание

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast прошлое интро топ было, особенно музыка 👍

      @mrtwon8638@mrtwon86382 жыл бұрын
  • Спасибо за труд. Наверное, это лучшее видео среди ру-сегмента ютуба. Множество авторов статей по даггеру используют зависимость dagger-android, следует ли вообще пользоваться ею?

    @axkov@axkov2 жыл бұрын
    • dagger-android был раньше, но сейчас он уже deprecated и рекомендуется использовать Dagger Hilt dagger.dev/hilt/ и Jetpack Hilt d.android.com/jetpack/androidx/releases/hilt

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Спасибо, доходчиво и красиво изложено. В своё время отказался от Dagger в пользу Kodein, потому что Dagger показался неуклюжим, громоздким и overengeneered.

    @Feivur@Feivur2 жыл бұрын
    • Какое впечатление складывается сейчас?

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast Честно говоря, желания использовать не возникает. Выглядит страшно. Возникает недоумение, почему такой монстр популярнее других простых и компактных фреймворков. Но знать его в лицо надо, и твоё изложение очень помогает, жду следующие серии!

      @Feivur@Feivur2 жыл бұрын
  • Спасибо за видео, очень познавательно. Cреди примеров я находил очень много тех, которые связаны именно с классами моделей. Но неоднократно слышал, что можно при работе с сетью, передавать с помощью DI репозиторий во ViewModel и т.д. Очень хотелось бы увидеть пример того, как это делать правильно, а также применение DI не только в работе с данными, если это допустимо. Спасибо!

    @mitiaygorodov4939@mitiaygorodov49392 жыл бұрын
    • Это первая лекция курса и я не хотел нырять с головой в реальный код, дальше будет погружение в Android код по современным стандартам Google и применение Dagger там

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast Спасибо! Очень полезный курс, всё очень понятно.

      @mitiaygorodov4939@mitiaygorodov49392 жыл бұрын
  • ну круто же

    @user-tj2ho2ml2f@user-tj2ho2ml2f2 жыл бұрын
  • super

    @axrorxojayodgorov3416@axrorxojayodgorov34162 жыл бұрын
  • Попробуй продублировать инфу по поводу второго видоса в описании к видео, либо в начале видоса вставить ее текстом, например. Многие смотрят не до конца, а лишь ту часть, которая им полезна и сразу вырубают видос без лайка и не понимают потом где продолжение курса)

    @GHOST20095@GHOST200952 жыл бұрын
    • Есть плейлист целый и выходят видосы. Тут я уже ничего не сделаю, если людям неинтересно

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Спасибо, Надеюсь в будет объяснения как инжектить в классы в которых нет Context

    @petrushevandrey7481@petrushevandrey74812 жыл бұрын
    • Так есть пример Repostiory. Context - такая же зависимость как и все остальные, разницы нет

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Хотелось бы увидеть конкретные примеры зачем нужен Dagger. Какие проблемы имеет код, в котором не используется DI? Может быть примеры "реальных" useCase'ов? Я предполагаю что Dagger облегчает написание тестов. Хотелось бы увидеть насколько легче писать тесты с Dagger'ом и без него?

    @user-oc7py1vy6s@user-oc7py1vy6s2 жыл бұрын
    • Таких убеждений я проводить не буду. В этом видео я объяснил зачем он нужен - ослабление связи между типами и масштабирование кодовой базы

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • Вот тут всё можно почитать, там совсем просто говориться о Dagger в тестах dagger.dev/dev-guide/testing.html

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Спасибо за очередной крутой материал! А будет про коин?

    @Chekist2008@Chekist20082 жыл бұрын
    • Нет, про Koin отдельного ничего делать не собираюсь, так как не интересно. Разве что "Почему ч отказался от Koin в пользу Dagger"

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast ну понятное дело что ран-тайм и все такое, но он же ведь однозначно проще для понимания чем даггер.

      @Chekist2008@Chekist20082 жыл бұрын
    • @@AndroidBroadcast помнится, первое видео на этом канале, которое я увидел, называлось "Почему Koin")

      @user-qv7po6wv6o@user-qv7po6wv6o2 жыл бұрын
  • Благодарю за видео, Кирилл! Каким образом AppComponent распознает метод где указан класс куда надо будет предоставить зависимость? Я так понимаю там под капотом проверка что если задается функция с любым названием, но с входным параметром (fun inject(activity: MainActivity)) , значит эта функция как раз и отвечает за требование предоставление зависимости, верно?

    @MarsIanin06@MarsIanin062 жыл бұрын
    • Процессор аннотаций находит все классы, которые помечены аннотациями Dagger и на этапе процессинга всё связывает

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast Понял, спасибо!

      @MarsIanin06@MarsIanin062 жыл бұрын
  • Здравствуйте, я правильно понимаю, что это нужно для того чтобы не хранить applicationContext в глобальной переменной? И управлять порядком сборки MainApp? Или я не так понял, в чем смысл DI. Можете, пожалуйста, объяснить, очень хочу использовать в своем проекте.

    @maleno4212@maleno4212Ай бұрын
  • Залайкайте це відео )

    @PandaTop.@PandaTop.2 жыл бұрын
  • Хотелось бы подробное видео про lateinit. До сих пор не понимаю, что с ним не так. По-хорошему, jb должны были хорошо над ним поработать (как с object-классами), чтобы все было ок с ним.

    @Trecoolerok@Trecoolerok2 жыл бұрын
    • Отдельного видео он очно не заслуживает, может если только в группе советов про Kotlin

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Было бы хорошо если бы вы опираясь на свой опыт сделали тестовый проект несложный с применениям разных инструментов по типу того же Dagger 2/MVVM/ и т.д =)

    @musicchannel7700@musicchannel77002 жыл бұрын
    • Да, это будет ближе к концу курса

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • насчёт inject -ирования активности не очень понял, обязательно её инжектировать в AppComponent? То есть если мы хотим заинжектить в любой класс не помеченный интерфейсом @Component то должны сам класс заинжектировать в AppComponent?

    @user-not_defined@user-not_defined2 жыл бұрын
    • В Componet и Subcomponent добавляются методы в которые можно будет выполнить inject зависимостей по вызову этого метода из сгенерированного компонента. Лучше выполнять inject через конструктор, тогда такие методы в Componet не понадобятся, но не у всех компонентов можно поменять конструктор. Например, стандартный компоненты Android (Activity, Service) требуют наличия конструктора по умолчанию и создаются его вызовом, а позже в onCreate() можно сделать inject зависимостей

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Можно ли показывать примеры сразу схожие на реальные, т.е. вот в этой папке у нас компонент, тут в отдельных модули. Вот где в итоге должен быть Context.appComponent я не особо понимаю, а в остальном все доступно, спасибо.

    @user-fb6rg5rw5q@user-fb6rg5rw5q2 жыл бұрын
    • Где вы поместите это расширение - неважно. Можно и без него обойтись, но оно продемонстрировано для удобства. Выносить его в отдельный файл было бы только расфокусом во время демонстрации кода

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Большое спасибо. У меня вопрос, чутка не понял А зачем проверять тип контекста при получении appComponent`a ? В коде when (this) { is MainApp -> appComponent else -> this.applicationContext.appComponent } Зачем проверять, если можно сразу вызвать this.applicationContext.appComponent ? Какое здесь отличие ? В любом же случае достанем тот же самый appComponent

    @ramsesii821@ramsesii8212 жыл бұрын
    • applicationContext также вернет тип Context. Свойство appComponent существует только в типе MainApp, соответственно нам нужно получить переменную такого типа. is MainApp в when позволяет нам убедиться что текущий Context - это MainApp и автоматически выполняет cast

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Все огонь, но то ли Dagger поменялся, то ли я по невнимательности что-то пропустил, но у меня в упор не создается класс DaggerAppComponent

    @oleg12395@oleg12395 Жыл бұрын
    • Подключил kapt или apt и настроил с Dagger для генерации кода?

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
    • @@AndroidBroadcast да, все огонь. Спасибо, с непривычки бывают застревания в таких простых вещах

      @oleg12395@oleg12395 Жыл бұрын
  • Коллеги, вот у нас на фирме во всех проектах подключен и используется Dagger, но я за 4 года так и не понял зачем, какова его ценность в реальном мире?

    @andrey.shpilevoy@andrey.shpilevoy5 ай бұрын
    • Тогда вам стоит лучше почитать про архитектуру софта и зачем нужен DI, либо пользоваться другим решением

      @AndroidBroadcast@AndroidBroadcast5 ай бұрын
  • На одном из проектов использовал by lazy для получения компонента. Что думаете на этот счет?

    @user-vd8wv3vo8t@user-vd8wv3vo8t2 жыл бұрын
    • Делегат lazy? Это случаем не Koin?

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast нет не Koin. Например _val appComponent: AppComponent by lazy { DaggerAppComponent.create() }_. Тем самым ухожу от использования lateinit.

      @user-vd8wv3vo8t@user-vd8wv3vo8t2 жыл бұрын
    • Я подумал ты про inject, а не создание AppComponent

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Целесообразно ли использовать dagger support?

    @user-uf5mr2xv9f@user-uf5mr2xv9f2 жыл бұрын
    • Я так понял речь про Dagger Android. Его уже не рекомендуют использовать, а брать Hilt

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Возникли некоторые вопросы : почему вы расширили именно Сontext? Что если у нас будет несколько компонентов типо ActivityComponent, FragmentComponent расширить Context опять ? Нельзя ли создавать какой нибудь глобальный типизированный функция и в зависимости от типа вернуть нужные компонент ?

    @voicetv9048@voicetv9048 Жыл бұрын
    • Указывайте таймкод, я не понимаю про что вы говорите

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
    • @@AndroidBroadcast 12:40 вы расширили Context при использовании даггер в андроид , про него и был вопрос !

      @voicetv9048@voicetv9048 Жыл бұрын
    • Это просто вспомогательная функции, вы можете написать свою какую угодно.

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
  • 📢Кто только начал учить Dagger 2 обратите внимание на версию Котлина в проекте. Почему? Потому что проекты на новых версиях Котлина работают с Даггером некорректно (Заработало с версией 1.4.32)

    @agentr227@agentr2272 жыл бұрын
    • С какой именно версией?

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast с 1.6, которая стояла у меня, но пишут, что такие проблемы с 1.5+ версиями котлин. Проект просто крашился при билде после того, как пытался заинджектить поле в Activity. (У друга аналогично всё было, проект нормально стал запускаться после смены версии кота на 1.4.32)

      @agentr227@agentr2272 жыл бұрын
  • А как строить модуль если объект содержит примитивные типы или стринг? Или как я понял дагер вообще не нужен для этого т.к это не его компетенция т.к на контроллере у меня прога просто не компилировалась.

    @user-zz4uj1mr5f@user-zz4uj1mr5f9 ай бұрын
    • С примитивными типами строить не получится, надо через типы-обертки примитивов или свои делать + лучше начать сразу использовать квалификаторы. На моем опыте все какие-то параметры оборачивались в один большой объекте конфига

      @AndroidBroadcast@AndroidBroadcast9 ай бұрын
  • Кирилл привет, у меня не появляется DaggerAppComponent и как скомпилировать граф зависимости?

    @garifzyanovrr@garifzyanovrr2 жыл бұрын
    • Причины может быть 2: не проставлены аннотации или не подключен процессор аннотаций (зависимости в Gradle через kapt или apt). Вопросы лучше задавать тут Android Broadcast t.me/android_broadcast_talks

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • Подскажите, была ли решена проблема у вас? Я уже и проверил все аннотации по тысячу раз и пробовал с kapt и c apt и пытался и так и этак, а все равно не генерируется ничего. Если решили проблему, не подскажете ли как мне ее решить?

      @alexeyflyagin@alexeyflyagin Жыл бұрын
    • Пишите в t.me/android_broadcast_talks

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
  • Если я создам объект в Application, а потом буду обращаться к нему из разных частей кода, например, из фрагментов - это же и есть "создать в одном месте", а обращаться отовсюду? Насколько я понимаю, даггер так и работает под капотом? Application - это же, по сути, единая точка входа в андроид приложение, то что живет на протяжении всего времени жизни запущенного приложения и точно существует в любой момент времени.

    @badadinfanti4553@badadinfanti45532 жыл бұрын
    • Не совсем так, это уже больше Service Locator. Также неправильно перегружать логикой Application класс и хранить всё на протяжении его жизни. То что вы описали рабочий подход, но DI имеет больше возможностей и независимости. Рекомендую почитать стать на тему сравнения

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Посидел пару лет на коине, теперь хочу вернуться в даггер. Правда через хилт, но не суть.

    @scraplesh@scraplesh2 жыл бұрын
    • Hilt тоже будет в курсе

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Как работает @Inject? Через рефлексию?

    @aircube485@aircube4852 жыл бұрын
    • Нет. Суть Dagger не использовать рефлексию во время работы приложений и генерировать весь код заранее.

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • в чем разница между lateinit var и private var _appComponent: AppComponent? = null internal val appComponent: AppComponent get() = checkNotNull(_appComponent) { "AppComponent isn't initialized" } в обоих случаях если не будет инициализации то будет ошибка только текст разный

    @user-yd4si7yd3b@user-yd4si7yd3b2 жыл бұрын
    • просто не могу понять насколько сильная была боль, которая связана с lateinit, что каждый раз вы говорите о том, что лучше не использовать?) это же по факту тот же nullcheck.

      @user-yd4si7yd3b@user-yd4si7yd3b2 жыл бұрын
    • При использовании lateinit требуется проверять с помощью метода isInitialized, что объект был проиницилизирован, что может сказаться на производительности Плюс не стоит забывать про UninitializedPropertyAccessException

      @user-qt2gu2pm2m@user-qt2gu2pm2m2 жыл бұрын
    • По сути поведение конечное одинаковое, но мне не нравится что lateinit выкидывает непонятное исключение и порой разработчики им начинают увлекаться, даже там где это не надо. Моё правило - lateinit только где есть аннотация Inject (даже в Detekt есть такое правило)

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • Если вы один, то контролировать это просто. Но вот на уровне команды правила нужны. Особенно я помню как наелся на нескольких проектах с крешами в проде из-за неоправданного использования lateinit, а понять по stack trace было невозможну исходную причину

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@user-qt2gu2pm2m проверять нужно, только если вы не уверены в том что переменная проинициализирована.

      @user-yd4si7yd3b@user-yd4si7yd3b2 жыл бұрын
  • Почему может не генерироваться DaggerAppComponent?

    @user-kg7mp4jh6k@user-kg7mp4jh6k Жыл бұрын
    • - Не настроил процессор аннотаций (kapt для Kotlin) - Нужно чтобы был интерфейс AppComponent с аннотацией @Component - Скомпилировать проект (возможно лучше начисто)

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
    • добавил id("kotlin-android"), id("kotlin-kapt"), при билде дает A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction, stacktrace ничего внятного не говорит

      @user-kg7mp4jh6k@user-kg7mp4jh6k Жыл бұрын
    • Посмотрите раздел зависимостей в Gradle. Это банальный вопрос - вы подключили процессор аннотаций, но нужнл с помощью него подключить dagqer compiler. Ну странице документации Dagger есть все это и я показывал в примере

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
  • 💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 📺 Курс по Dagger 2 clck.ru/ViWKV

    @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Я только начинаю знакомится с миром андройда, и у меня тут возникает вопрос: если activity, и иные примитивы андройда не предполагают чтобы в них что-то внедряли - почему не использовать подход service locator, тем более dagger как понимаю даёт возможность это делать через тот самый create или билдер...

    @user-hr2dk6jy1k@user-hr2dk6jy1k2 жыл бұрын
    • Activity - это лишь точка входа и она не подстраивалась под какие-то либы или фреймворки. Много компонентов требуют наличие конструктора по умолчанию (без параметров)

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast пока я склоняюсь к тому, что пытаются впихнуть di в сущность которая своим интерфейсом показывает что все зависимости можно добавлять только через другой механизм. Но сообществу таки надо только чтобы было @inject initlater... Лучше бы гугл научил людей работать с состоянием, а не бороться с пересозданием зависимостей, когда activity пересоздалась...

      @user-hr2dk6jy1k@user-hr2dk6jy1k2 жыл бұрын
  • А как настроить такую тему в студии? ))

    @EvgeniyGooDiBunakov@EvgeniyGooDiBunakov2 жыл бұрын
    • Что именно?

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast цвета

      @EvgeniyGooDiBunakov@EvgeniyGooDiBunakov2 жыл бұрын
    • Это стандартная темна тема Darcula + плагин plugins.jetbrains.com/plugin/10080-rainbow-brackets

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • всё делал как в уроке, но не находит DaggerAppComponent

    @inquisitor4894@inquisitor489410 ай бұрын
    • Ответ прост: Нужно собрать проект, после проверить, должен появиться.

      @inquisitor4894@inquisitor48949 ай бұрын
  • А зачем когда есть уже инджект нам нужна проперти computer в интерфейсе AppComponent это избыточно, можно удалить.

    @TheKostya29@TheKostya292 жыл бұрын
    • Это было лишь для примера

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
    • @@AndroidBroadcast я так и понял, но если на место новичка стать, кто-то может начать это делать у себя по аналогии

      @TheKostya29@TheKostya292 жыл бұрын
  • 13:30 А я пришел к рекурсии.. о_О

    @VoidObj@VoidObj2 жыл бұрын
    • Теста ради заменил ваш else на else -> DaggerAppComponent.builder().contextModule(ContextModule(this)).build() и все взлетело. Понятное дело, что это ужас и так делать нельзя. Забавно..

      @VoidObj@VoidObj2 жыл бұрын
    • ГОСПОДИЯИДИОТ... 🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️🤦‍♂️ Всего-то в манифесте забыл прописать.. А ведь говорили "Не забудьте прописать в манифесте"!

      @VoidObj@VoidObj2 жыл бұрын
  • лучше ведь binds использовать вместо provides

    @stanislavkorolev376@stanislavkorolev3762 жыл бұрын
    • Если есть возможность, то да. Подробнее об этом будет в следующем выпуске

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • Не не не первую зависимость я уже получил, больше не надо

    @naronwaz7824@naronwaz7824 Жыл бұрын
  • На тему опроса, почему не велик интерес к роликам - да просто некогда. Нужна отдельная кружка чаю, чтобы сесть и посмотреть.

    @Feivur@Feivur2 жыл бұрын
    • 😔

      @AndroidBroadcast@AndroidBroadcast2 жыл бұрын
  • kapt больше не актуален, рекомендуется миграция на ksp

    @user-fg3wl4xu9d@user-fg3wl4xu9d2 ай бұрын
    • Dagger с KSP на момент написания комментария находится в экспериментальном статусе

      @AndroidBroadcast@AndroidBroadcast2 ай бұрын
    • @@AndroidBroadcast у меня с kapt при добавлении в проект постоянно какие-то проблемы с версиями, а с ksp так легко всё прошло - быстро, как в первый раз)

      @user-fg3wl4xu9d@user-fg3wl4xu9d2 ай бұрын
  • kzhead.info/sun/ZMiIo8meaYywhHA/bejne.html 10.09. появилась проблема. не видит DaggerAppComponent . 10 раз перепроверил код. ощущение что с тех пор чтото изменилось в гредле или не хватает чего то на уровне гредл проджекта. версия 2,44,2 + kapt {correctErrorTypes = true} тоже не помогло =(

    @sfsd9507@sfsd9507 Жыл бұрын
    • Класс генерируется вообще?

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
    • @@AndroidBroadcast класс DaggerAppComponent не генерируется. при попытке его вписать ИДЕ предлагает только: DaggerCollections и DaggerGenerated. аннотации распознает, dagger.аннотацию импортирует в документе

      @sfsd9507@sfsd9507 Жыл бұрын
    • @@AndroidBroadcast так... завел. добавил к аннотации @Component аннотацию @Singleton, не знаю на сколько это верное решение

      @sfsd9507@sfsd9507 Жыл бұрын
    • Надо смотреть настройку проекта, а не только код

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
    • @@sfsd9507 Лучше задайте вопрос в t.me/android_broadcast_talks

      @AndroidBroadcast@AndroidBroadcast Жыл бұрын
  • Не понимаю куче восхитительных отзывов. Начало нормально , но потом что-то намудрил, чёрт ногу сломит....

    @aleksandrboyko1388@aleksandrboyko13882 жыл бұрын
KZhead