android - Dagger2 地图多重绑定 - [Dagger/MissingBinding]
问题描述
我正在使用Moshi
forserialization
和deserialization
of 字符串来枚举和返回。为此,我设置了JsonAdapter.Factory
. 我知道已经enum
提供了一个适配器,Moshi
但问题是它使用了 finalname()
方法,Enum
并且我的一些字符串以数字开头,所以我的枚举前缀为_
(下划线)。
因此,在设置 thisJsonAdapter.Factory
时,我想将其设置为可重用的 Factoy,它可用于任何扩展接口ParcelableEnum
、实现ParcelableEnum.Factory
接口且字段带有StringToEnum
注解的 Enum。
为了实现这一点,我尝试Map
使用Dagger
. S,我创建了一个 Key 注释,将其附加到annotation
的Binds
方法中,Module
并尝试Map
在我的代码中访问 。
ParcelableEnumAdapterKey
@Target(AnnotationTarget.FUNCTION)
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
@MapKey
annotation class ParcelableEnumAdapterKey(val value : KClass<out ParcelableEnum>)
ParcelableEnumFactoryProvider
@Module
@InstallIn(SingletonComponent::class)
interface ParcelableEnumFactoryProvider {
@Binds
@IntoMap
@ParcelableEnumAdapterKey(VideoQuality::class)
fun bindsVideoQualityParcelableEnumFactory(factory: VideoQuality.VideoQualityFactory): ParcelableEnum.Factory
}
最后是我的JsonAdapter.Factory
实现
StringToEnumAdapterFactory
class StringToEnumAdapterFactory @Inject constructor(
private val factoriesMap: Map<KClass<ParcelableEnum>, @JvmSuppressWildcards Provider<ParcelableEnum.Factory>>
): JsonAdapter.Factory {
// An implementation of this factory.
}
但由于某种原因,我收到以下错误:
error: [Dagger/MissingBinding] java.util.Map<kotlin.reflect.KClass<com.type.ParcelableEnum>,javax.inject.Provider<com.type.ParcelableEnum.Factory>> cannot be provided without an @Provides-annotated method.
我不确定我缺少什么,起初我认为这是一个Kotlin
-Java
通配符泛型不兼容问题,所以我添加JvmSuppressWildcards
到Provides<ParcelableEnum.Factory>
. 但即便如此,我还是遇到了上述错误。
解决方案
推荐阅读
- keras - keras.backend 没有为变分自动编码器模型定义
- sql - 在 SQL 查询结果的空字段中放置预定义值
- node.js - PM2:什么是“版本”,为什么总是“0.1.0”?
- opencv - 使用python调整小图像的大小以从中获取文本
- python - 如何更改字典的键值?
- docker - 杀死超过 x 天前创建的 docker 容器
- express - 如何将图像上传到strapi?
- reactjs - 如何通过 api 调用使用 React.Suspense?
- c# - 将 Markdown 转换为纯文本
- javascript - VS Code - TypeError:无法读取未定义的属性“toUpperCase”