dependency-injection - 如果 Dagger/Hilt 是抽象类或接口(interface),它们在模块中有区别吗?

标签 dependency-injection dagger dagger-hilt

我有一个问题,也许有经验的人可以让我更清楚一些。我将 Hilt 模块编写为接口(interface)或抽象类。这两者之间有实际区别吗?例如,我在我的应用程序的 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 类的 @Binds 方法只是为了了解应该将哪个实现类 (TemporaryImageFileFactoryImpl) 链接到接口(interface) (TemporaryImageFileFactory).

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

关于dependency-injection - 如果 Dagger/Hilt 是抽象类或接口(interface),它们在模块中有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067710/

相关文章:

android - Dagger @Module 中的 "injects"应该放什么?

android - 如何在 android studio chipmunk 及更高版本中添加类路径 hilt-android-gradle-plugin

android - 如何使用 Hilt 在 ViewModel 中注入(inject)工作管理器

java - Google Guice 中的计算常量

java - Dagger不生成子组件创建方法

java - 依赖注入(inject) servlet 监听器

android - 如何使用 Dagger 异步提供对象?

android - Hilt 在 android 库中使用

android - Dagger-Hilt:@ViewModelInject 没有注入(inject) MyViewModel 并崩溃?

symfony - 选择众多服务之一作为要使用的服务