Dagger/Hilt 模块是抽象的 类 还是接口有区别吗?

Dagger/Hilt is there a difference in modules if they are abstract classes or interfaces?

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

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

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

}

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

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

使用@Binds时,使用interfaceabstract class没有区别。 Dagger 使用这些 @Module classes 的 @Binds 方法只是为了理解哪个实现 class (TemporaryImageFileFactoryImpl) 应该 linked 到界面 (TemporaryImageFileFactory).

使用此信息,Dagger 生成其 own 代码以 link 实现接口。构建成功后,在IDE中可以看到无论你使用什么,@Binds方法都会显示为未使用。