我有一个Android应用,该应用使用Hilt进行依赖项注入,并使用Moshi进行JSON解析。该应用程序向REST服务器发出HTTP请求,该服务器对所有返回数据的端点以以下格式返回json响应:
{
data: specificData,
errors: [...]
}
我想提供一个通用的json适配器,它可以像这样注入到DataSource类中:
class LoginDataSource @Inject constructor(
private val okHttpClient: OkHttpClient,
private val authAdapter: JsonAdapter<NetworkResponse<Auth>>
)
,例如以下数据类:
@JsonClass(generateAdapter = true)
data class NetworkResponse<T> (val data: T, val errors: Array<Int>)
@JsonClass(generateAdapter = true)
data class Auth (val token: String, val refreshToken: String)
寻找一种提供json适配器的方法,我最终创建了以下模块:
@Module
@InstallIn(ActivityComponent::class)
object MoshiAdapterModule {
@Provides
inline fun <reified T> provideGenericNetworkResponseJsonAdapter(): JsonAdapter<NetworkResponse<T>> {
val typeT: Type = Types.newParameterizedType(NetworkResponse::class.java, T::class.java)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
return moshi.adapter(typeT)
}
}
但是,这没有用,我收到一个[Dagger / MissingBinding]错误,告诉我JsonAdapter<NetworkResponse<Auth>> cannot be provided without an @Provides-annotated method
。有人可以看到我在做什么错吗?
我最近开始学习Kotlin,并且以前从未使用过Hilt或Moshi,所以如果我遗漏了一些明显的东西,我深表歉意。