通过刀柄中的不同具体类绑定接口?

ami*_*imi 2 android dagger dagger-hilt

我使用刀柄。我有一个接口,但我有两个实现它们的类。我需要在 ViewModels 中实现不同的 @Bind 接口。请帮帮我?创建自定义组件?或使用自定义范围?

And*_*rew 5

您提供的给定代码会有所帮助,但让我们假设:

你的界面

interface YourInterface {}
Run Code Online (Sandbox Code Playgroud)

班级

class MyFirstClassImpl @Inject constructor() : YourInterface

class MySecondClassImpl @Inject constructor() : YourInterface
Run Code Online (Sandbox Code Playgroud)

迪模块

@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
Run Code Online (Sandbox Code Playgroud)

视图模型

class YourViewModel @ViewModelInject constructor(
    @MyFirstClass private val firstClass: YourInterface,
    @MySecondClass private val secondClass: YourInterface
) : ViewModel()
Run Code Online (Sandbox Code Playgroud)

这应该可以完成工作。

  • 不它不是。因为,MyFirstClass和MySecondClass提供相同的接口,你必须告诉hilt,如何区分它们。如果没有`@MyFirstClass`和`@MySecondClass`,hilt将不知道何时提供哪个类。 (2认同)