Dagger/Hilt 如果模块是抽象类或接口,它们之间有区别吗?

Mar*_*vel 7 dependency-injection dagger dagger-hilt

我有一个问题,也许有经验的人可以让我更清楚一些。我已经将Hilt模块编写为接口或抽象类。这两者之间有实际区别吗?例如,我在Hilt我的应用程序中更改了以下模块,但它仍然有效。

@Module
@InstallIn(ViewModelComponent::class)
abstract class LocalModules {

    @Binds
    @ViewModelScoped
    abstract fun bindTemporaryImageFileFactory(factory: TemporaryImageFileFactoryImpl): TemporaryImageFileFactory

}
Run Code Online (Sandbox Code Playgroud)

或者

@Module
@InstallIn(ViewModelComponent::class)
interface LocalModules {

    @Binds
    @ViewModelScoped
    fun bindTemporaryImageFileFactory(factory: TemporaryImageFileFactoryImpl): TemporaryImageFileFactory
}
Run Code Online (Sandbox Code Playgroud)

小智 3

interface使用或abstract class何时使用之间没有区别@Binds。Dagger 使用这些@Module类的方法只是为了了解哪个实现类 ( ) 应链接到接口 ( )。@BindsTemporaryImageFileFactoryImplTemporaryImageFileFactory

使用此信息,Dagger 生成自己的代码以将接口与实现链接起来。构建成功后,在IDE中可以看到,无论你使用什么方法,该@Binds方法都会显示为未使用。