我有一个使用 Hilt 进行依赖注入和 Moshi 进行 JSON 解析的 Android 应用程序。该应用程序向 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,所以如果我遗漏了一些明显的东西,我深表歉意。