bind interface by different concrete class in hilt?

Viewed 1815

I use Hilt . I have one interface but I have two classes that have implemented them. I need @Bind interface by different implemented in ViewModels . pleas help me ? create custom Component? or use custom Scope ?

1 Answers

A given code from you would help, but lets assume this:

Your Interface

interface YourInterface {}

Classes

class MyFirstClassImpl @Inject constructor() : YourInterface

class MySecondClassImpl @Inject constructor() : YourInterface

Di Module

@Module
@InstallIn(SingletonComponent::class)
inteface YourClassModule {
    @Binds
    @MyFirstClass
    fun provideMyFirstClass(class: MyFirstClassImpl): YourInterface

    @Binds
    @MySecondClass
    fun provideMySecondClass(class: MySecondClassImpl): YourInterface

}

@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class MyFirstClass

@Qualifier
@Retention(AnnotationRetention.RUNTIME)
annotation class MySecondClass

ViewModel

class YourViewModel @ViewModelInject constructor(
    @MyFirstClass private val firstClass: YourInterface,
    @MySecondClass private val secondClass: YourInterface
) : ViewModel()

This should do the job.

Related