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

แชร์
ฝัง
  • เผยแพร่เมื่อ 29 พ.ย. 2024

ความคิดเห็น • 204

  • @ЕвгенийМихалец
    @ЕвгенийМихалец 3 ปีที่แล้ว +32

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

  • @MrLight363
    @MrLight363 3 ปีที่แล้ว +34

    Просто вышка. То что надо и все по делу👍

  • @ksz87
    @ksz87 3 ปีที่แล้ว +3

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

  • @GriNAME
    @GriNAME 3 ปีที่แล้ว +11

    Лайк и коммент желательно сотворить всем!))

  • @ЕгорСолдатов-ы7э
    @ЕгорСолдатов-ы7э 3 ปีที่แล้ว +3

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Супер! Жду ваш отзыв здорово поможет улучшать этот и будущие курсы

  • @ОлегШошин-п7х
    @ОлегШошин-п7х 3 ปีที่แล้ว +63

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +6

      В будущих роликах практически теории и не будет, так что таких проблем не возникнет

  • @codemachine19
    @codemachine19 ปีที่แล้ว +2

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

  • @luyt2
    @luyt2 ปีที่แล้ว

    Отлично, на одном дыхании смотрится. Спасибо за качественный контентк

  • @sergeynaksin5256
    @sergeynaksin5256 3 ปีที่แล้ว +1

    Кирилл, вот прям красава. Хороший формат! Для начинающих прям огонь, всё в принципе доступно разложил.!

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

  • @CEPVAHT
    @CEPVAHT 3 ปีที่แล้ว +2

    Спасибо за урок, все понятно и без лишней информации

  • @fliker2309
    @fliker2309 3 ปีที่แล้ว +2

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

  • @Stopkaaaa
    @Stopkaaaa 3 ปีที่แล้ว +2

    Отличное видео получилось, жду продолжения! Спасибо👍

  • @АндрейКолмогоров-б9ы
    @АндрейКолмогоров-б9ы 3 ปีที่แล้ว +2

    Спасибо тебе Кирилл, это очень полезный курс

  • @vladimirpustovit3782
    @vladimirpustovit3782 3 ปีที่แล้ว

    Большое спасибо за курс! Как раз всё никак не разберусь, как правильно работать с даггером в многомодульном проекте.

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

  • @motorInlive
    @motorInlive 4 หลายเดือนก่อน

    Спасибо большое за ваши труды!

  • @dimaklekchyan
    @dimaklekchyan 3 ปีที่แล้ว +3

    Отличный материал, спасибо!

  • @luckytima2315
    @luckytima2315 3 ปีที่แล้ว +2

    Отлично! Определено надо делать продолжение)

  • @ЕвгенийКостров-в7н
    @ЕвгенийКостров-в7н 3 ปีที่แล้ว +1

    Молодец, Кирилл! Спасибо, Кирилл!

  • @antaki93
    @antaki93 ปีที่แล้ว

    Практическая часть супер наглядная 👍

  • @LaVladz
    @LaVladz 3 ปีที่แล้ว +4

    Спасибо, все понятно и интересно!

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +4

      Спасибо. Вы даже не представляете как я рад этому

  • @Feivur
    @Feivur 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Какое впечатление складывается сейчас?

    • @Feivur
      @Feivur 3 ปีที่แล้ว

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

  • @Станислав-л7ы2ф
    @Станислав-л7ы2ф 3 ปีที่แล้ว +1

    Спасибо за видео. Жду следующего)

  • @Maribobah81
    @Maribobah81 3 ปีที่แล้ว +1

    Кирилл, спасибо! Как всегда топчик!

  • @serhiiwin3276
    @serhiiwin3276 3 ปีที่แล้ว +1

    Отличное начало!

  • @KabukiWarrior369
    @KabukiWarrior369 3 ปีที่แล้ว +2

    Очень крутое и понятное объяснение, большое спасибо!

  • @ПавелЗубко-ц8ч
    @ПавелЗубко-ц8ч 3 ปีที่แล้ว +1

    Лайк не глядя , спасибо огромное !

  • @user-fc9gt6dl2i
    @user-fc9gt6dl2i 3 ปีที่แล้ว +1

    Ждём следующую часть

  • @kirill6020
    @kirill6020 3 ปีที่แล้ว

    Спасибо за видео! Ждем продолжение!

  • @redfox6089
    @redfox6089 3 ปีที่แล้ว +2

    Заранее лайк!!! Спасибо Вам!!!

  • @azizbekrasulmetov9293
    @azizbekrasulmetov9293 ปีที่แล้ว

    Все четко, понятно просто супер!!!

  • @MikhailGureev
    @MikhailGureev 3 ปีที่แล้ว

    Большое спасибо, Кирилл.

  • @Tswet
    @Tswet 3 ปีที่แล้ว +2

    Спасибо, хотелось бы больше теории

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

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

    • @Tswet
      @Tswet 3 ปีที่แล้ว

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

  • @andyousil910
    @andyousil910 3 ปีที่แล้ว +1

    Идеальное объяснение, спасибо!

  • @СергійМурашев
    @СергійМурашев 3 ปีที่แล้ว

    Интересно. Спасибо за лекцию

  • @АндрейКорощупов
    @АндрейКорощупов 3 ปีที่แล้ว +15

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Окей, обратим внимание

    • @mrtwon8638
      @mrtwon8638 3 ปีที่แล้ว

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

  • @TerebeninEP
    @TerebeninEP 3 ปีที่แล้ว

    Урок отличный! Спасибо!

  • @facece1
    @facece1 3 ปีที่แล้ว +1

    Спасибо Кирилл!

  • @dreaaaam98
    @dreaaaam98 2 ปีที่แล้ว

    Супер. спасибо за материал)

  • @СергейПанов-з3ц
    @СергейПанов-з3ц 3 ปีที่แล้ว +7

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Вот тут всё можно почитать, там совсем просто говориться о Dagger в тестах dagger.dev/dev-guide/testing.html

  • @Dtritus993
    @Dtritus993 3 ปีที่แล้ว

    Спасибо за работу, было интересно 🤩😍

  • @Александр-м7о7т
    @Александр-м7о7т 3 ปีที่แล้ว

    Спасибо за курс!

  • @KudashovDev
    @KudashovDev 3 ปีที่แล้ว

    Крутой материал, коротко и понятно)

  • @axkov
    @axkov 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

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

  • @ВладимирЧударевский
    @ВладимирЧударевский 3 ปีที่แล้ว +1

    Каааеф, очень доходчиво

  • @МаксимШимко-ц3ф
    @МаксимШимко-ц3ф 3 ปีที่แล้ว +1

    Супер, спасибо!

  • @GHOST20095
    @GHOST20095 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

  • @nickolasivantsov260
    @nickolasivantsov260 3 ปีที่แล้ว

    Nice ) Просто и доступно!

  • @jamesalexander1062
    @jamesalexander1062 3 ปีที่แล้ว +1

    Круто, спасибо

  • @maxsimpleapps
    @maxsimpleapps 3 ปีที่แล้ว +1

    Отлично 🖖

  • @ЕгорПоляков-т5ъ
    @ЕгорПоляков-т5ъ 3 ปีที่แล้ว +2

    лайк сразу)

  • @mitiaygorodov4939
    @mitiaygorodov4939 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

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

    • @mitiaygorodov4939
      @mitiaygorodov4939 3 ปีที่แล้ว

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

  • @anmelnik
    @anmelnik 3 ปีที่แล้ว +1

    кааайф, давай ещё)

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Второй урок уже на канале

  • @druce18
    @druce18 3 ปีที่แล้ว +1

    Лайк, спасибо!

  • @voicetv9048
    @voicetv9048 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว

      Указывайте таймкод, я не понимаю про что вы говорите

    • @voicetv9048
      @voicetv9048 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว

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

  • @agentr227
    @agentr227 2 ปีที่แล้ว +1

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

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว

      С какой именно версией?

    • @agentr227
      @agentr227 2 ปีที่แล้ว

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

  • @d.mertsalov
    @d.mertsalov 3 ปีที่แล้ว +1

    Спасибо!

  • @petrushevandrey7481
    @petrushevandrey7481 3 ปีที่แล้ว +2

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

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

  • @zokirjonqodirov6927
    @zokirjonqodirov6927 3 ปีที่แล้ว

    спасибо большое👍👍

  • @ramsesii821
    @ramsesii821 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

  • @mrgagarinn
    @mrgagarinn 3 ปีที่แล้ว +1

    Спасибо

  • @MarsIanin06
    @MarsIanin06 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Процессор аннотаций находит все классы, которые помечены аннотациями Dagger и на этапе процессинга всё связывает

    • @MarsIanin06
      @MarsIanin06 3 ปีที่แล้ว

      @@AndroidBroadcast Понял, спасибо!

  • @andrey.shpilevoy
    @andrey.shpilevoy ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว

      Тогда вам стоит лучше почитать про архитектуру софта и зачем нужен DI, либо пользоваться другим решением

  • @user-not_defined
    @user-not_defined 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

  • @Chekist2008
    @Chekist2008 3 ปีที่แล้ว

    Спасибо за очередной крутой материал! А будет про коин?

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

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

    • @Chekist2008
      @Chekist2008 3 ปีที่แล้ว +1

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

    • @ВасилийНикитин-ф5п
      @ВасилийНикитин-ф5п 3 ปีที่แล้ว

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

  • @garifzyanovrr
    @garifzyanovrr 2 ปีที่แล้ว +1

    Кирилл привет, у меня не появляется DaggerAppComponent и как скомпилировать граф зависимости?

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว +1

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

    • @alexeyflyagin
      @alexeyflyagin ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว

      Пишите в t.me/android_broadcast_talks

  • @badadinfanti4553
    @badadinfanti4553 3 ปีที่แล้ว +1

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

  • @maleno4212
    @maleno4212 8 หลายเดือนก่อน

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

    • @НикитаБухарин-ж9г
      @НикитаБухарин-ж9г 3 หลายเดือนก่อน

      Чтобы в ручную не вызывать каждую зависимость в каждом своем классе. Ты в di устанавливаешь как они будут передаваться . И потом просто передаешь их в конструктор класса. По итогу все зависимости указываются в конструкторах класса , а DI сам уже их создает и передает. DI был создан чтобы отделить слои приложения от зависимости . Чтобы на пример presentation слой ничего не знал про data слой

  • @oleg12395
    @oleg12395 2 ปีที่แล้ว

    Все огонь, но то ли Dagger поменялся, то ли я по невнимательности что-то пропустил, но у меня в упор не создается класс DaggerAppComponent

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว

      Подключил kapt или apt и настроил с Dagger для генерации кода?

    • @oleg12395
      @oleg12395 2 ปีที่แล้ว

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

  • @inquisitor4894
    @inquisitor4894 ปีที่แล้ว +1

    всё делал как в уроке, но не находит DaggerAppComponent

    • @inquisitor4894
      @inquisitor4894 ปีที่แล้ว

      Ответ прост: Нужно собрать проект, после проверить, должен появиться.

  • @ЕвгенийМоскаленко-у9щ
    @ЕвгенийМоскаленко-у9щ 3 ปีที่แล้ว

    Целесообразно ли использовать dagger support?

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Я так понял речь про Dagger Android. Его уже не рекомендуют использовать, а брать Hilt

  • @ВладимирГросс-я1ъ
    @ВладимирГросс-я1ъ 3 ปีที่แล้ว

    На одном из проектов использовал by lazy для получения компонента. Что думаете на этот счет?

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Делегат lazy? Это случаем не Koin?

    • @ВладимирГросс-я1ъ
      @ВладимирГросс-я1ъ 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Я подумал ты про inject, а не создание AppComponent

  • @РусланСамарбаев
    @РусланСамарбаев 3 ปีที่แล้ว

    Ништяк!

  • @ДмитрийАзаренко-т4э
    @ДмитрийАзаренко-т4э 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

  • @НиколайИртуганов
    @НиколайИртуганов 2 ปีที่แล้ว

    Почему может не генерироваться DaggerAppComponent?

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว

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

    • @НиколайИртуганов
      @НиколайИртуганов 2 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว

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

  • @Trecoolerok
    @Trecoolerok 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Отдельного видео он очно не заслуживает, может если только в группе советов про Kotlin

  • @МагестЛоил
    @МагестЛоил ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว

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

  • @AndroidBroadcast
    @AndroidBroadcast  3 ปีที่แล้ว

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

  • @ДмитрийГорбачев-д2ц
    @ДмитрийГорбачев-д2ц 3 ปีที่แล้ว +1

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

    • @ДмитрийГорбачев-д2ц
      @ДмитрийГорбачев-д2ц 3 ปีที่แล้ว +1

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

    • @tayabuz
      @tayabuz 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

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

    • @ДмитрийГорбачев-д2ц
      @ДмитрийГорбачев-д2ц 3 ปีที่แล้ว

      @@tayabuz проверять нужно, только если вы не уверены в том что переменная проинициализирована.

  • @TheKostya29
    @TheKostya29 3 ปีที่แล้ว +1

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Это было лишь для примера

    • @TheKostya29
      @TheKostya29 3 ปีที่แล้ว +1

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

  • @ОлегТимофеев-щ3ш
    @ОлегТимофеев-щ3ш 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

    • @ОлегТимофеев-щ3ш
      @ОлегТимофеев-щ3ш 3 ปีที่แล้ว

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

  • @musicchannel7700
    @musicchannel7700 3 ปีที่แล้ว

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

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Да, это будет ближе к концу курса

  • @ЕленаМ-о7щ
    @ЕленаМ-о7щ 3 ปีที่แล้ว

    ну круто же

  • @PandaTop.
    @PandaTop. 3 ปีที่แล้ว

    Залайкайте це відео )

  • @scraplesh
    @scraplesh 3 ปีที่แล้ว

    Посидел пару лет на коине, теперь хочу вернуться в даггер. Правда через хилт, но не суть.

  • @stanislavkorolev376
    @stanislavkorolev376 3 ปีที่แล้ว

    лучше ведь binds использовать вместо provides

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

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

  • @EvgeniyGooDiBunakov
    @EvgeniyGooDiBunakov 3 ปีที่แล้ว

    А как настроить такую тему в студии? ))

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Что именно?

    • @EvgeniyGooDiBunakov
      @EvgeniyGooDiBunakov 3 ปีที่แล้ว

      @@AndroidBroadcast цвета

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Это стандартная темна тема Darcula + плагин plugins.jetbrains.com/plugin/10080-rainbow-brackets

  • @axrorxojayodgorov3416
    @axrorxojayodgorov3416 3 ปีที่แล้ว

    super

  • @naronwaz7824
    @naronwaz7824 2 ปีที่แล้ว

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

  • @Feivur
    @Feivur 3 ปีที่แล้ว

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

  • @VoidObj
    @VoidObj 3 ปีที่แล้ว

    13:30 А я пришел к рекурсии.. о_О

    • @VoidObj
      @VoidObj 3 ปีที่แล้ว

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

    • @VoidObj
      @VoidObj 3 ปีที่แล้ว

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

  • @sfsd9507
    @sfsd9507 ปีที่แล้ว

    th-cam.com/video/1dOsef2ZzQ8/w-d-xo.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  ปีที่แล้ว +1

      @@sfsd9507 Лучше задайте вопрос в t.me/android_broadcast_talks

  • @aleksandrboyko1388
    @aleksandrboyko1388 3 ปีที่แล้ว

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

  • @mikhaillazarev5378
    @mikhaillazarev5378 2 ปีที่แล้ว

    Надеюсь автор читает текст, а не говорит от себя, потому что так без эмоций рассказывать это жесть.

  • @МагестЛоил
    @МагестЛоил ปีที่แล้ว

    Я при любых условиях при попытке скомпилировать проект где есть appComponent даже если он пустой или даже не содержит модуля выдает
    A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
    > java.lang.reflect.InvocationTargetException (no error message)

    • @AndroidBroadcast
      @AndroidBroadcast  ปีที่แล้ว

      Похоже что есть kapt в модуле не настроен kotlin

  • @Oleg_Bessonov
    @Oleg_Bessonov 3 ปีที่แล้ว +1

    Спасибо, ждём продолжения!!!

  • @PavelStr-x5w
    @PavelStr-x5w 8 หลายเดือนก่อน

    Большое спасибо за урок!!!

  • @tera393
    @tera393 2 ปีที่แล้ว

    Шикарно, спасибо

  • @ramilskl
    @ramilskl 3 ปีที่แล้ว

    Круто! Спасибо!

  • @user-not_defined
    @user-not_defined 3 ปีที่แล้ว

    Спасибо большое

  • @Ilia_Goncharuk
    @Ilia_Goncharuk 3 ปีที่แล้ว

    Спасибо!