【发布时间】:2021-07-24 08:27:08
【问题描述】:
我有
BeatPlayer.kt
interface BeatPlayer {
fun getSession(): MediaSessionCompat
fun playSong(extras: Bundle = bundleOf(BY_UI_KEY to true))
fun playSong(id: Long)
fun playSong(song: Song)
}
class BeatPlayerImplementation(
private val context: Application,
private val musicPlayer: AudioPlayer,
private val songsRepository: SongsRepository,
private val queueUtils: QueueUtils,
private val audioFocusHelper: AudioFocusHelper
) : BeatPlayer {
.........
}
MusicService.kt
@AndroidEntryPoint
class MusicService : CoroutineService(Main) {
@Inject
lateinit var beatPlayer: BeatPlayer
}
当我运行它时说:
[Dagger/MissingBinding] 如果没有 @Provides 注释的方法,就无法提供 BeatPlayer。
所以我添加了这个:
@Module
@InstallIn(SingletonComponent::class)
abstract class StorageModule {
@Singleton
@Binds
abstract fun bindBeatPlayer(beatPlayer: BeatPlayer): BeatPlayerImplementation
}
现在,我运行,它说:
错误:@Binds 方法的参数类型必须可分配给返回类型 hilt
如何正确操作?
【问题讨论】:
-
您的绑定方式错误,您需要一个返回
BeatPlayer并输入BeatPlayerImplementation的方法。 -
好的,有代码示例吗??
-
abstract fun bindBeatPlayer(beatPlayer: BeatPlayerImplementation): BeatPlayer -
现在我得到 - 错误:如果没有 @Inject 构造函数或提供注释的方法,就无法提供 BeatPlayerImplementation。
-
是的,您需要某种方式来提供它,也许初学者 Dagger/Hilt 教程会是个好主意?如果您似乎还没有掌握基础知识。
标签: android android-studio kotlin dependency-injection dagger-hilt