Size: a a a

2021 January 22

Т

Тони in Dagger 2
Друзья, помогите разобраться в следующем кейсе, есть Компонент1 и в нем есть модуль (помеченный как абстрактный) и все методы помеченны аннотацией  @Binds


Есть компонент2, который является дочкой Компонента1, и вот вопрос, каким образом сделать так,чтобы методы с аннотацией @Binds также перешли в Компонент2 ?


Я работал с методами provide и там всё понятно , я просто  в первом модуле пишут явно ручками объекты которые нужны дочке и всё ок, но как абстоят дела с методами с @binds ?

Спасибо
источник

АЕ

Алексей Ершов... in Dagger 2
Binds это просто синтаксически более короткая версия Provides для связи интерфейса с реализацией, в остальном они аналогичны
источник

SV

Sergey Vasilchenko in Dagger 2
плюс Binds чуть меньше классов генерит  :)
источник

АЕ

Алексей Ершов... in Dagger 2
Да, если можно делать binds надо делать binds)
источник

Т

Тони in Dagger 2
Алексей Ершов
Binds это просто синтаксически более короткая версия Provides для связи интерфейса с реализацией, в остальном они аналогичны
Спасибо большое, Алексей  :)
источник
2021 January 25

Т

Тони in Dagger 2
Друзья, такой вопрос, есть приложение с single activity , стек следующий: dagger2, cicerone, moxy
https://medium.com/@yurimachioni/creating-an-instagram-like-flow-using-cicerone-and-dagger2-bottomnavigation-with-fragments-777771ff4401

Вдохновился данной статьей, собственно в данном случае разделение на глобальный роутер и на роутер в каждом фрагменте вкладке (он же родитель), и вот вопрос, в примере по ссылке выше flowComponent инжектиться в child fragment т.к нужно в модуль передать компонент который мы можем взять у родителя. Впринципи работает и всё ок, но по идее-то по грамотному роутер должен быть в presenter`е, а как в таком случае его туда передать?) Может у кого-нибудь есть пример, или же кто-то может дать совет?)
источник

АЕ

Алексей Ершов... in Dagger 2
Тони
Друзья, такой вопрос, есть приложение с single activity , стек следующий: dagger2, cicerone, moxy
https://medium.com/@yurimachioni/creating-an-instagram-like-flow-using-cicerone-and-dagger2-bottomnavigation-with-fragments-777771ff4401

Вдохновился данной статьей, собственно в данном случае разделение на глобальный роутер и на роутер в каждом фрагменте вкладке (он же родитель), и вот вопрос, в примере по ссылке выше flowComponent инжектиться в child fragment т.к нужно в модуль передать компонент который мы можем взять у родителя. Впринципи работает и всё ок, но по идее-то по грамотному роутер должен быть в presenter`е, а как в таком случае его туда передать?) Может у кого-нибудь есть пример, или же кто-то может дать совет?)
А в чём вопрос? Как заинжектить что-то в презентер?
источник

Т

Тони in Dagger 2
Алексей Ершов
А в чём вопрос? Как заинжектить что-то в презентер?
Вот таким образом выглядит component в child`е

в flowComponent мы передаем компонент парента.

Вопрос заключается в том, каким образом сделать инжект компонента, если flowComponent требует обращения в parent ?

Я же не могу структуру как на скрине перенести в presenter т.к там идёт обращение к parentFragment, вот я и спрашиваю как это поправить?)
источник

Y

Yanis in Dagger 2
а вы компоненты храните во фрагментах?
источник

АЕ

Алексей Ершов... in Dagger 2
Тони
Вот таким образом выглядит component в child`е

в flowComponent мы передаем компонент парента.

Вопрос заключается в том, каким образом сделать инжект компонента, если flowComponent требует обращения в parent ?

Я же не могу структуру как на скрине перенести в presenter т.к там идёт обращение к parentFragment, вот я и спрашиваю как это поправить?)
Что такое сделать инжект компонента?
источник

Т

Тони in Dagger 2
Yanis
а вы компоненты храните во фрагментах?
Обычно хранил в Application, когда не было нужды привязывать cicerone
источник

Т

Тони in Dagger 2
Алексей Ершов
Что такое сделать инжект компонента?
в данном контексте имею ввиду (хотя это не является инжектом компонента)
flowComponent( (parentFragment as TabNavigationFragment).component )
источник

АЕ

Алексей Ершов... in Dagger 2
Тони
в данном контексте имею ввиду (хотя это не является инжектом компонента)
flowComponent( (parentFragment as TabNavigationFragment).component )
В общем, смотрите. Структуру переносить в презентер не надо, презентер проще заинжектить через конструктор. Повесьте аннотацию @Inject на конструктор презентера и сделайте во фрагменте val presenter: MyPresenter by moxyPresenter { component.getPresenter() }
Или, если вы во фрагменте делаете component.inject(this), то можно вот так https://github.com/moxy-community/Moxy#inject-with-dagger2
источник

АЕ

Алексей Ершов... in Dagger 2
и учтите, что презнетер в Moxy живёт дольше, чем ваш компонент, поэтому если вы в компоненте создаёте роутер, то после пересоздания фрагмента в презентере останется жить ваш старый роутер. Решить это можно синхронизировав ЖЦ даггер-компонента с ЖЦ презентера в мокси, или просто вынеся роутер на уровень выше, чтобы он жил в родительском компоненте.
источник
2021 January 26

Т

Тони in Dagger 2
Алексей Ершов
и учтите, что презнетер в Moxy живёт дольше, чем ваш компонент, поэтому если вы в компоненте создаёте роутер, то после пересоздания фрагмента в презентере останется жить ваш старый роутер. Решить это можно синхронизировав ЖЦ даггер-компонента с ЖЦ презентера в мокси, или просто вынеся роутер на уровень выше, чтобы он жил в родительском компоненте.
Приветствую)

В фрагменте сделал следующее:

1. В фрагменте написал следующий код
   @ProvidePresenter
   fun providePresenter(): MyPresenter {
       return component!!.getMyPresenter()
   }


Обращаюсь к фрагменту так: proviePresenter.method()

В onAttach() фрагмента делаю component?.inject(this)

2.Повесил аннотацию @Inject на конструктор презентера

3. В модуле самого дочернего компонента сделал providesMyPresenter(params)

4. В компоненте прописал    fun getMyPresenter(): MyPresenter

Впринципи всё ок, всё инжектится в презентер и всё прекрасно, но почему-то перестали вызываться методы фрагмента(т.е вью) хотя viewState в дебаге не null.

В чем может быть проблема, подскажи пожалуйста)
источник
2021 January 27

Т

Тони in Dagger 2
Решил проблему заменив код из 1 пункта на

    private val presenter by moxyPresenter { component!!.getMyPresenter() }
источник

АЕ

Алексей Ершов... in Dagger 2
Не понял про providePresenter.method(), но в целом нормально выглядит)
источник

Т

Тони in Dagger 2
Алексей Ершов
Не понял про providePresenter.method(), но в целом нормально выглядит)
Выражаю огромную благодарность :)
источник
2021 January 29

Т

Тони in Dagger 2
Алексей Ершов
Не понял про providePresenter.method(), но в целом нормально выглядит)
Алексей,приветствую) А не подскажите, как в базовый абстрактный класс фрагмента
работать с делегатом?
Получаются проблемы с данным кодом :
```
val presenter: MyPresenter by moxyPresenter { component.getPresenter() }
```
источник

IG

Ilya Gulya in Dagger 2
Тони
Алексей,приветствую) А не подскажите, как в базовый абстрактный класс фрагмента
работать с делегатом?
Получаются проблемы с данным кодом :
```
val presenter: MyPresenter by moxyPresenter { component.getPresenter() }
```
По-хорошему не должно быть в базовом абстрактном классе by moxyPresenter
источник