Size: a a a

2020 February 28

SV

Sviat Volkov in Dagger 2
Ilya Gulya
И слегка нарушить принцип инверсии контроля)
le classique :)
источник

IG

Ilya Gulya in Dagger 2
Что в целом не сильно страшно в данном конкретном случае
источник
2020 March 03

DZ

Dmitry Zhgun in Dagger 2
День добрый.
Решил разбить уже неприличных размеров проект на модули, и не могу подружить его с Dagger - пробовал решить проблему и через @Subcomponent и через зависимости между компонентами.

Сделал core, api, и app модули (gradle)

в core на текущий момент пара сервисов, Room, wrapper для shared prefs.
Т.к. сервисам core требуется доступ к wrapper'у, пишу core component:
@Singleton
@Component(modules = {
       CoreModule.class,
       RoomModule.class,
})
public interface CoreComponent {
// blablabla
void inject(MyMegaService myService);
//blablabla
}
Далее, в api через dependencies цепляю CoreComponent:
(Api блок сейчас сам содержит ещё 2 сервиса, в которые надо инжектить, потому для него отдельный компонент сделал, если я все правильно понимаю)
@NetworkScope
@Component(modules = NetworkModule.class, dependencies = CoreComponent.class)
public interface NetworkComponent {
// blabla
void inject (NetworkBlaBlaBlaService service);

Если я все правильно понимаю, то в AppComponent, которому все это нужно, нужно написать что-то вроде:
@AppScope
@Component(modules = {
     //modules
}, dependencies = NetworkComponent.class)
public interface AppComponent {
}

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

ЧЯДНТ? Может нужно вынести все зависимые компоненты в App-модуль и оставить только AppComponent с модулями(dagger) которые будут расписаны в соотв. модулях gradle?

Может быть я в корне чего-то не понимаю?
источник

М

Михаил in Dagger 2
Dmitry Zhgun
День добрый.
Решил разбить уже неприличных размеров проект на модули, и не могу подружить его с Dagger - пробовал решить проблему и через @Subcomponent и через зависимости между компонентами.

Сделал core, api, и app модули (gradle)

в core на текущий момент пара сервисов, Room, wrapper для shared prefs.
Т.к. сервисам core требуется доступ к wrapper'у, пишу core component:
@Singleton
@Component(modules = {
       CoreModule.class,
       RoomModule.class,
})
public interface CoreComponent {
// blablabla
void inject(MyMegaService myService);
//blablabla
}
Далее, в api через dependencies цепляю CoreComponent:
(Api блок сейчас сам содержит ещё 2 сервиса, в которые надо инжектить, потому для него отдельный компонент сделал, если я все правильно понимаю)
@NetworkScope
@Component(modules = NetworkModule.class, dependencies = CoreComponent.class)
public interface NetworkComponent {
// blabla
void inject (NetworkBlaBlaBlaService service);

Если я все правильно понимаю, то в AppComponent, которому все это нужно, нужно написать что-то вроде:
@AppScope
@Component(modules = {
     //modules
}, dependencies = NetworkComponent.class)
public interface AppComponent {
}

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

ЧЯДНТ? Может нужно вынести все зависимые компоненты в App-модуль и оставить только AppComponent с модулями(dagger) которые будут расписаны в соотв. модулях gradle?

Может быть я в корне чего-то не понимаю?
А какие ошибки летят?
источник

SV

Sergey Vasilchenko in Dagger 2
для начала можно почитать ошибки, обычно там написано чего не хватает или что не провайдится
источник

DZ

Dmitry Zhgun in Dagger 2
Почему то из канала выкидывает.
источник

DZ

Dmitry Zhgun in Dagger 2
Ругается на scope, ругается на то, что не знает, откуда достать зависимость
источник

DZ

Dmitry Zhgun in Dagger 2
В зависимости от решения
источник

SV

Sergey Vasilchenko in Dagger 2
вангую что в интерфейсах CoreComponent и NetworkComponent не описано что они провайдят наружу
источник

IG

Ilya Gulya in Dagger 2
Dmitry Zhgun
Почему то из канала выкидывает.
нажмите кнопку которую вас просит нажать бот
источник

IG

Ilya Gulya in Dagger 2
эту
источник

DZ

Dmitry Zhgun in Dagger 2
дык нажал!
источник

DZ

Dmitry Zhgun in Dagger 2
Тут админ есть? перезапросить бы это сообщение от бота
источник

DZ

Dmitry Zhgun in Dagger 2
источник

SV

Sergey Vasilchenko in Dagger 2
походу бот кикает даже если нажать) @ilyagulya
источник

DZ

Dmitry Zhgun in Dagger 2
Так, по ошибкам:
1) Если оставить все как в моем сообщении, то ругается, что
"AppScope may not reference bindings with different scopes ", ибо CoreComponent имеет аннотацию @Singleton
источник

DZ

Dmitry Zhgun in Dagger 2
2) Если поставить у AppComponent @Singleton то ругается на error: This @Singleton component cannot depend on scoped components:
@Component(modules = {
^
источник

SV

Sergey Vasilchenko in Dagger 2
а в модулях какие скоупы у провайдов? соответствуют скоупу самого компонента в котором эти модули?
источник

DZ

Dmitry Zhgun in Dagger 2
Sergey Vasilchenko
а в модулях какие скоупы у провайдов? соответствуют скоупу самого компонента в котором эти модули?
CoreComponent - Singleton и все модули в нем имеют @Provides с @Singleton
NetworkComponent - @NetworkScope, Модуль - unscoped
AppComponent - @AppScope для зависимостей всех модулей
источник

SV

Sergey Vasilchenko in Dagger 2
а зачем вам три скоупа если они все по сути синглтон? или надо чтоб у апп и нетворк жц был короче чем у приложения?)
источник