【发布时间】:2020-12-26 16:00:34
【问题描述】:
我使用 Hilt 。 我有一个接口,但我有两个实现了它们的类。 我需要在 ViewModels 中实现不同的 @Bind 接口。 请帮帮我? 创建自定义组件?还是使用自定义范围?
【问题讨论】:
标签: android dagger dagger-hilt
我使用 Hilt 。 我有一个接口,但我有两个实现了它们的类。 我需要在 ViewModels 中实现不同的 @Bind 接口。 请帮帮我? 创建自定义组件?还是使用自定义范围?
【问题讨论】:
标签: android dagger dagger-hilt
您提供的给定代码会有所帮助,但让我们假设:
interface YourInterface {}
class MyFirstClassImpl @Inject constructor() : YourInterface
class MySecondClassImpl @Inject constructor() : YourInterface
@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
class YourViewModel @ViewModelInject constructor(
@MyFirstClass private val firstClass: YourInterface,
@MySecondClass private val secondClass: YourInterface
) : ViewModel()
这应该可以完成工作。
【讨论】:
@MyFirstClass和@MySecondClass注解需要什么?它只是为了可读性吗?
@MyFirstClass 和@MySecondClass,hilt 将不知道何时提供哪个类。