Возможно ли в Hilt запровайдить два класса с разным Component, если один принимает в конструктор другой?
Всем привет. Подскажите, пожалуйста, возможно ли в хилте запровайдить два класса с разным Component
, если один из этих классов принимает в конструктор другой? Если нельзя, то я столкнулся с проблемой, когда одна зависимость тянет другую, и тогда придется кучу модулей поменять с ViewModelComponent
на SingletonComponent
.
Один модуль провайдит синглтоны, потому что обработка диплинков не привязана к ЖЦ какого-либо класса:
@Module
@InstallIn(SingletonComponent::class)
object DeeplinkModule {
@Provides
@IntoSet
fun provideDeeplinkProcessor (сardReissueRepository: CardReissueRepository): DeeplinkProcessorV2 = MyDeeplinkProcessor(сardReissueRepository)
}
Другой модуль провайдит объекты для вьюмодели, поэтому я выставил ViewModelComponent:
@Module
@InstallIn(ViewModelComponent::class)
object ViewModelModule {
@Provides
fun provideCardReissueRepository (/* Много зависимостей */): CardReissueRepository = CardReissueRepositoryImpl(/* Много зависимостей */)
}
CardReissueRepository
принимает в конструктор много всего, и если делать его SingletonComponent
, то все его зависимости тоже придётся делать SingletonComponent
. Или нет?
Ответы (1 шт):
Можно, если scope (component) имеет больший ЖЦ, чем объект куда он инжектится. SingletonComponent имеет больший ЖЦ, чем ViewModelComponent, соответственно SingletonComponent объекты можно инжектить в ViewModelComponent объекты, а наоборот нельзя