我有一个问题,也许有经验的人可以让我更清楚一些。我将 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
时,使用interface
和abstract class
没有区别。 Dagger 使用这些 @Module
类的 @Binds
方法只是为了了解应该将哪个实现类 (TemporaryImageFileFactoryImpl
) 链接到接口(interface) (TemporaryImageFileFactory
).
使用此信息,Dagger 生成其 own将接口(interface)与实现链接起来的代码。构建成功后,在IDE中你可以看到无论你使用什么,@Binds
方法都会显示为未使用。
关于dependency-injection - 如果 Dagger/Hilt 是抽象类或接口(interface),它们在模块中有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067710/