Size: a a a

2019 September 19

IS

Ivan Sablin in Dagger 2
А очистка неиспользуемых объектов?
источник

IS

Ivan Sablin in Dagger 2
В зависимости от скоупа, типо если аппСкоуп, то будут жить пока не умрет апп или же пока ссылка будет?
источник

IG

Ilya Gulya in Dagger 2
Ivan Sablin
В зависимости от скоупа, типо если аппСкоуп, то будут жить пока не умрет апп или же пока ссылка будет?
Будет жить пока есть ссылка на компонент который породил зависимость
источник

IG

Ilya Gulya in Dagger 2
Если зависимость Scoped
источник

IS

Ivan Sablin in Dagger 2
На компонент, понял, а когда вызывается build, создаётся совсем новый компонент и объекты так же?
источник

IG

Ilya Gulya in Dagger 2
Ivan Sablin
На компонент, понял, а когда вызывается build, создаётся совсем новый компонент и объекты так же?
Те которые провайдит этот компонент да
источник

IS

Ivan Sablin in Dagger 2
Ребят, можете так на вскидку сформулировать почему нехорошо использовать @Inject где вздумается, а нужно пользоваться именно ижекцией через конструктор?
источник

IS

Ivan Sablin in Dagger 2
кроме того что везде нужно дергать компонент
источник

IG

Ilya Gulya in Dagger 2
Ivan Sablin
Ребят, можете так на вскидку сформулировать почему нехорошо использовать @Inject где вздумается, а нужно пользоваться именно ижекцией через конструктор?
Скорее просто лучше всего использовать инъекцию в конструктор, а не в поля.
Инъекция в поле сделана только потому что не во всех окружениях возможна инъекция в конструктор. Например в конструктор Activity мы ничего заинжектить не можем, приходится в поля.
Инъекция в конструктор предпочтительна потому, что в этом случае у объекта нет неявных зависимостей. Всё что нужно ему для корректной работы явно видно и ты не сможешь инстанциировать объект если у тебя нету необходимых зависимостей.
источник

IG

Ilya Gulya in Dagger 2
Ivan Sablin
кроме того что везде нужно дергать компонент
Дёргание компонента есть нарушение принципа инверсии контроля. Если ты внутри объекта дёргаешь компонент, значит объект ответственен за инициализацию своих зависимостей.
источник

IS

Ivan Sablin in Dagger 2
ну да, сам так прикинул, что везде должен быть доступ к компоненту.
источник

IS

Ivan Sablin in Dagger 2
это уже проблема, потому что не всегда знаешь какой из них дернуть, напрмер в том же дата слое, который вообще по сути не знает про то кто что провайдит
источник

ИМ

Иван Макеев in Dagger 2
Ilya Gulya
Дёргание компонента есть нарушение принципа инверсии контроля. Если ты внутри объекта дёргаешь компонент, значит объект ответственен за инициализацию своих зависимостей.
Добрый день. А можете подсказать, что вы подразумеваете под "Дёргание компонента"
источник

ИМ

Иван Макеев in Dagger 2
Можно пример?
источник

IG

Ilya Gulya in Dagger 2
Иван Макеев
Добрый день. А можете подсказать, что вы подразумеваете под "Дёргание компонента"
Ну подобное
class Test(val component: DaggerComponent) {

   @field:Inject
   lateinit var a: A

   @field:Inject
   lateinit var B: B

   init {
       component.inject(this)
   }

}
источник

IG

Ilya Gulya in Dagger 2
Иван Макеев
Добрый день. А можете подсказать, что вы подразумеваете под "Дёргание компонента"
Или так
class Test2() {

   @field:Inject
   lateinit var a: A

   @field:Inject
   lateinit var B: B

   init {
       SomeInjector.getDaggerComponent().inject(this)
   }

}
источник

IG

Ilya Gulya in Dagger 2
Опа подхода - не ок
источник

IG

Ilya Gulya in Dagger 2
Ок подход, в свою очередь такой:
class Test @Inject constructor(
   private val a: A,
   private val b: B
)
источник

ИМ

Иван Макеев in Dagger 2
ага, понял. спасибо.
источник

ИМ

Иван Макеев in Dagger 2
то есть лучше всего внедрять через конструктор и тогда не придется инжектить в компонент?
источник