Size: a a a

2019 November 19

n

neikist in Dagger 2
Привет, а подскажет кто нибудь хороших примеров андроид проектов на даггере сорцы которых можно посмотреть и пощупать? Интересно как раз на управление скоупами посмотреть и как оно с разными архитектурами выглядит.
источник

I

Igor in Dagger 2
Ilya Gulya
Нету
вообще это работает, только делают такое не напрямую, вот сейчас как раз смотрю как сделано)
источник

I

Igor in Dagger 2
neikist
Привет, а подскажет кто нибудь хороших примеров андроид проектов на даггере сорцы которых можно посмотреть и пощупать? Интересно как раз на управление скоупами посмотреть и как оно с разными архитектурами выглядит.
в гугл блю принтс есть примеры с даггером
источник

n

neikist in Dagger 2
Igor
в гугл блю принтс есть примеры с даггером
Спасибо. Почему то по разным блюпринтам побегать не догадался.  Хотя конечно интереснее бы было на живых приложениях посмотреть
источник

ОР

Олег Румянцев in Dagger 2
neikist
Спасибо. Почему то по разным блюпринтам побегать не догадался.  Хотя конечно интереснее бы было на живых приложениях посмотреть
ща тебе продовую кодбазу отправлю, проверяй
источник

I

Igor in Dagger 2
Ilya Gulya
Нету
допустим есть                                                                                                                             @AppScope
@Component(
   modules = [BindingModule::class
]...    и дальше я вижу @Module
abstract class BindingModule {

   @MainActivityScope
   @ContributesAndroidInjector(modules = [MainActivityModuleProvider::class, MainActivityModuleBinder::class])
   abstract fun mainActivity(): MainActivity
   то есть уже вижу различные скоупы, а внутри MainActivityModuleBinder вообще много разных скоупс
источник

IG

Ilya Gulya in Dagger 2
Igor
допустим есть                                                                                                                             @AppScope
@Component(
   modules = [BindingModule::class
]...    и дальше я вижу @Module
abstract class BindingModule {

   @MainActivityScope
   @ContributesAndroidInjector(modules = [MainActivityModuleProvider::class, MainActivityModuleBinder::class])
   abstract fun mainActivity(): MainActivity
   то есть уже вижу различные скоупы, а внутри MainActivityModuleBinder вообще много разных скоупс
А, ну с AndroidInjection я не работал, тут не подскажу.
источник
2019 November 20

AB

Aldar Baldanov in Dagger 2
Здравствуйте! Борюсь с ошибкой:
OrganizationRepository cannot be provided without an @Provides-annotated method

Имею такой код:
@Component(modules = [
   ActivityModule::class
   ]
)
interface AppComponent: AndroidInjector<SampleApplication> {
....
}

@Module
abstract class ActivityModule {

   @ContributesAndroidInjector(
       modules = [OrganizationFragmentModule::class]
   )
   internal abstract fun contributeMainActivity(): MainActivity
}

@Module
abstract class OrganizationFragmentModule {

   @ContributesAndroidInjector(modules = [
       OrganizationDataModule::class,
       OrganizationDomainModule::class,
       OrganizationPresentationModule::class])
   abstract fun contributeOrganizationsFragment(): OrganizationsFragment
}

@Module
internal class OrganizationDataModule {

      // Вот provide-метод
   @Provides
   internal fun provideOrganizationRepository(): OrganizationRepository {
       return OrganizationRepositoryImpl()
   }
}

@Module
internal class OrganizationDomainModule {

   @Provides
   internal fun provideGetOrganizationsUseCase(organizationsRepository: OrganizationRepository)
       = GetOrganizationsUseCase(organizationsRepository)
}

Подскажите пожалуйста, в чем может быть проблема?
источник

AB

Aldar Baldanov in Dagger 2
Это может быть связано с тем, что Repository предоставляется как зависимость из модуля OrganizationDataModule в модуль OrganizationDomainModule?
источник

VB

V B in Dagger 2
Aldar Baldanov
Это может быть связано с тем, что Repository предоставляется как зависимость из модуля OrganizationDataModule в модуль OrganizationDomainModule?
Попробуйте переместить это

@Provides
   internal fun provideOrganizationRepository(): OrganizationRepository {
       return OrganizationRepositoryImpl()
   }

в OrganizationFragmentModule и собрать, если все будет ок, то вы поймете в чес проблема)
источник

AB

Aldar Baldanov in Dagger 2
спасибо за ответ) попробую
источник

VB

V B in Dagger 2
И возможно стоит задуматься над скоупами
источник

VB

V B in Dagger 2
если посомтреть на это как на дерево, то эти модули лежат на одном уровне и ничего не знают друг о друге
источник

AB

Aldar Baldanov in Dagger 2
Вот да, сперва так считал
источник

AB

Aldar Baldanov in Dagger 2
Я пробовал вот так еще:

@Module(includes = [OrganizationDataModule::class])
internal class OrganizationDomainModule {

   @FeatureScope
   @Provides
   internal fun provideGetOrganizationsUseCase(organizationsRepository: OrganizationRepository)
       = GetOrganizationsUseCase(organizationsRepository)
}


но аналогично
источник

VB

V B in Dagger 2
и плюс ко всему вам не нужно прописывать этот провайд
источник

VB

V B in Dagger 2
если вы запровайдили все зависимости, то можна навесить на конструктор аннотацию Inject
источник

AB

Aldar Baldanov in Dagger 2
V B
и плюс ко всему вам не нужно прописывать этот провайд
а почему?
источник

AB

Aldar Baldanov in Dagger 2
internal class GetOrganizationsUseCase @Inject constructor(
   private val organizationRepository: OrganizationRepository
)

да, Inject есть
источник

VB

V B in Dagger 2
на реализациях интерфейсов это не работает
источник