Kotlin:使用Moshi和Hilt

时间:2020-06-23 14:48:18

标签: kotlin moshi dagger-hilt

我有一个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,所以如果我遗漏了一些明显的东西,我深表歉意。

0 个答案:

没有答案