Возможно ли в 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 шт):

Автор решения: IR42

Можно, если scope (component) имеет больший ЖЦ, чем объект куда он инжектится. SingletonComponent имеет больший ЖЦ, чем ViewModelComponent, соответственно SingletonComponent объекты можно инжектить в ViewModelComponent объекты, а наоборот нельзя

→ Ссылка