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