【问题标题】:Dagger/Hilt is there a difference in modules if they are abstract classes or interfaces?Dagger/Hilt 如果模块是抽象类或接口,它们有区别吗?
【发布时间】:2021-02-05 17:18:13
【问题描述】:

我有一个问题,也许有经验的人可以让我更清楚一点。我已经将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
}

【问题讨论】:

    标签: dependency-injection dagger dagger-hilt


    【解决方案1】:

    使用@Binds 时使用interfaceabstract class 没有区别。 Dagger 使用这些@Module 类的@Binds 方法仅用于了解应该将哪个实现类(TemporaryImageFileFactoryImpl)链接到接口(@98​​7654328@)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2016-09-23
      • 2010-12-27
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 2010-11-13
      相关资源
      最近更新 更多