Инъекция зависимости с помощью dagger2 в Android - PullRequest
0 голосов
/ 08 апреля 2020

Я учусь использовать Dagger 2 в Android на данный момент. Я думаю, что понимаю идею того, как это работает, но у меня есть некоторые сомнения по поводу некоторых деталей. В различных уроках о Dagger 2 в Android я видел использование AndroidInjector. Это выглядит великолепно, но у меня есть несколько вопросов по этому поводу.

  1. Класс приложения onCreate создает компонент, а этот компонент внедряет все действия и фрагменты. Это происходит в начале приложения или когда создается конкретное c действие или фрагмент?
  2. Что мне не нравится в этом подходе, так это то, что когда у меня будет 100 действий и каждое действие будет иметь 2 фрагмента, тогда в ActivityModule мне нужно будет написать 100 раз:

    @ContributesAndroidInjector abstract fun contributeMyActivity(): MyActivity

    И снова то же самое 200 раз для фрагментов. Это много шаблонного кода. Я прав или я что-то здесь упускаю? Есть ли какой-нибудь другой лучший подход для этого?

  3. Когда компонент приложения внедряет все действия, тогда нет необходимости в других компонентах? Это просто один большой, созданный в начале приложения? Существуют ли ситуации, когда могут потребоваться другие компоненты?

1 Ответ

0 голосов
/ 09 апреля 2020

Dagger2 Android мало отличается от стандартного Dagger2, когда речь идет о настраиваемой области видимости и субкомпонентах Dagger2 android дает вам мало возможностей не беспокоиться о подкомпоненте. То, о чем вы говорите, на самом деле является субкомпонентом. И ваши вопросы:

1.Application class onCreate создает компонент, а этот компонент внедряет все действия и фрагменты. Это происходит в начале приложения или при создании указанного действия или фрагмента c?

Ответ : Да, это зависит от того, что еще у вас в этом компоненте, сколько действий и сколько фрагментов и какое действие / фрагмент вы запускаете / фрагмент и какое действие непосредственно ассоциируется с вашим компонентом уровня приложения и да, приложение внедряет / инициализирует только один раз, пока приложение не уничтожено.

2. Что мне не нравится в этом подходе, так это то, что когда у меня будет 100 действий и каждое действие будет иметь 2 фрагмента, тогда в ActivityModule мне придется написать 100 раз:

@ ContributesAndroidInjector абстрактное веселье contribMyActivity (): MyActivity И опять то же самое 200 раз за фрагменты. Это много шаблонного кода. Я прав или я что-то здесь упускаю? Есть ли какой-то другой лучший подход для этого?

Ответ : Лучший способ сделать это - предоставить подкомпонент для каждого действия, и вам не нужно беспокоиться о том, что будет делать 199-е действие, поскольку ваше 199-е действие ассоциировать с этим 199-м компонентом и 199-м компонентом, подключенным только к appComponent, а не к другому subComponent, и этот один подкомпонент связан с вашим этим одним действием, и это одно действие предназначено для этого фрагмента или двух фрагментов, и да, не забудьте соответствующим образом охватить каждый компонент и Вы не беспокоитесь о appComponent и subComponent, это как наследство Ребенок может получить доступ ко всему, что есть у родителя.

3.Когда компонент приложения внедряет все действия, тогда нет необходимости в других компонентах?

Ответ : НЕТ !! У вас есть 200 мероприятий? Вы можете создать 200 компонентов для каждого действия, и каждый компонент будет подключен к компоненту уровня приложения для доступа к графику зависимости уровня приложения / объекту. Теперь я задам простой вопрос. Кто создает 200 мероприятий?

Android команда предложила использовать dagger2 И они признали, что это крутая кривая обучения, но они все еще хотят, чтобы разработчики использовали dagger2, и они больше фокусируются на стандартном dagger2, чем на android dagger2. Это недостаток кинжала android, который он заставляет использовать, чтобы связать вашу активность с androidContributeInjector (), он не дает этой руки, чтобы поиграть с компонентом больше, но стандартный dagger2 делает это. Лично я использовал dagger2- Android но я переключился на стандарт-Dagger2 и теперь он обеспечивает полный контроль над компонентом или субкомпонентами.

Вот что вам нужно На самом деле https://developer.android.com/training/dependency-injection/dagger-android

...