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
时,使用interface
或abstract class
没有区别。 Dagger 使用这些 @Module
classes 的 @Binds
方法只是为了理解哪个实现 class (TemporaryImageFileFactoryImpl
) 应该 linked 到界面 (TemporaryImageFileFactory
).
使用此信息,Dagger 生成其 own 代码以 link 实现接口。构建成功后,在IDE中可以看到无论你使用什么,@Binds
方法都会显示为未使用。
我有一个问题,也许有经验的人可以让我更清楚一些。我已经将 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
时,使用interface
或abstract class
没有区别。 Dagger 使用这些 @Module
classes 的 @Binds
方法只是为了理解哪个实现 class (TemporaryImageFileFactoryImpl
) 应该 linked 到界面 (TemporaryImageFileFactory
).
使用此信息,Dagger 生成其 own 代码以 link 实现接口。构建成功后,在IDE中可以看到无论你使用什么,@Binds
方法都会显示为未使用。