Зачем использовать Dagger 2 HasActivityInjector? - PullRequest
1 голос
/ 13 июля 2020

Hy

Я хотел бы использовать Dagger 2 в своем приложении, но я немного запутался.

В обучающих видео на YouTube я видел реализацию, подобную этой: HasActivityInjector , но я также видел CodeLabs dagger 2 tutorial , и не упоминалось об этом HasActivityInjector, но было внедрение активности.

Итак, эти два похожи , или я что-то не понял?

CodeLabs:

@Component(modules = [StorageModule::class])
interface AppComponent {
    ...

    // Classes that can be injected by this Component
    fun inject(activity: RegistrationActivity)
    fun inject(activity: MainActivity)
}


class MainActivity : AppCompatActivity() {
    ...
    override fun onCreate(savedInstanceState: Bundle?) {

        (application as MyApplication).appComponent.inject(this)

        super.onCreate(savedInstanceState)
        ...
    }
}

Other implementation: 

class SampleApplication : Application(), HasActivityInjector {

    @Inject
    lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Activity>


    override fun onCreate() {
        super.onCreate()
        DaggerApplicationComponent.builder()
                .applicationBind(this)
                .build()
                .inject(this)

    }

    override fun activityInjector(): AndroidInjector<Activity> = dispatchingAndroidInjector

}

class MainActivity : AppCompatActivity(){ 
override fun onCreate(savedInstanceState: Bundle?) {
   AndroidInjection.inject(this)
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)
}
}

1 Ответ

0 голосов
/ 13 июля 2020

HasActivityInjector является частью dagger.android. Вы можете , но не обязаны использовать его. Вы легко можете жить без этой штуки и при этом использовать все, что предлагает кинжал. Вот почему он есть в некоторых руководствах, но не во всех.

Вы должны прочитать это руководство , чтобы понять его цель. Это поможет вам решить, хотите вы этого или нет. Вот самая важная часть.

Почему Dagger на Android сложен

Одна из основных трудностей при написании приложения Android с использованием Dagger заключается в том, что множество Android фреймворков классы создаются самой ОС, например Activity и Fragment, но Dagger работает лучше всего, если он может создавать все внедренные объекты. Вместо этого вам нужно выполнить внедрение членов в методе жизненного цикла. [...]

У этого есть несколько проблем:

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

dagger. android

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...