Инъекция презентаторов с помощью MVP / Dagger 2 - PullRequest
0 голосов
/ 17 мая 2018

Я недавно узнал о DI и Dagger 2, и я чувствую, что у меня больше шаблонов, чем было у меня. Моя настройка включает

  • AppComponent - предоставляет Application, Resources и другие материалы, связанные с сетью. @Singleton Scoped.
  • Feature1Component, Feature2Component .... - предоставлять репозитории, используемые на разных экранах. @Feature область действия, подкомпоненты AppComponent. Имеет методы «плюс» для компонентов экрана.
  • Screen1Component, Screen2Component ... - это то, где возникает ощущение шаблона - у каждого компонента экрана есть только метод ввода для фрагмента / действия, который используется для изображения экран. Подкомпонент FeatureXComponent. Каждый соответствующий модуль выглядит так:

    @Module
    public class Screen1Module
    {
        private final Screen1Contract.View view;
    
        public Screen1Module(Screen1Contract.View view)
        {
            this.view = view;
        }
    
        @Provides
        public Screen1Contract.View provideView()
        {
            return view;
        }
    }
    

Таким образом, в результате для каждого экрана я пишу Компонент и Модуль, так как могу вызывать только следующее:

((MyApplication) getActivity().getApplication())
                .getFeature1Component()
                .newScreen1Component(new Screen1Module(this))
                .inject(this);    

когда я инициализирую свой взгляд (Activity or Fragment), для удобства введения только презентатора.

Есть ли способ сделать это, который не требует столько шаблонов? Я надеялся внедрить экраны на уровне «Функции», но, полагаю, это невозможно, поскольку экраны имеют более короткий жизненный цикл, чем функции.

1 Ответ

0 голосов
/ 22 мая 2018

Вот почему dagger-android родился с кинжалом 2.10. Это упрощает внедрение типов ядра Android.

@ContributesAndroidInjector заменяет подкомпоненты. DaggerActivity и другие избавляются от getComponent()....inject(this)

его официальный документ

и довольно хорошую статью, которую я недавно нашел

...