gpt4 book ai didi

android - 使用 Hilt,如何注入(inject)没有上下文的类?

转载 作者:行者123 更新时间:2023-12-04 23:59:16 36 4
gpt4 key购买 nike

我有一个名为 NetworkManager 的类。由于它不是 Android 组件之一,我使用自定义入口点 NetworkManagerEntryPoint 和一个返回 NetworkClient 对象的 fun想要注入(inject)。

现在,要使用 Hilt 注入(inject)此类的实例,我相信我需要使用 EntryPointAccessors 中的一种 Helper 方法。但它们都需要引用 android 组件。那么,我真的必须将 Android 组件(如 Context)传递给我的类才能使用 Hilt 注入(inject)对象吗?

class NetworkManager() {

@InstallIn(SingletonComponent::class)
@EntryPoint
interface NetworkManagerEntryPoint {
fun getNetworkClient(): NetworkClient
}

var defaultNetworkClient: NetworkClient = EntryPointAccessors.fromApplication(
context, // Do I have to pass a context to this class to use Hilt?
NetworkManagerEntryPoint::class.java
).getNetworkClient()

fun <R : Any> executeRequest(
request:Request<R>,
networkClient: NetworkClient = defaultNetworkClient
): Response<R> {
// Do some operation
}
}

最佳答案

你好,也许你可以尝试我已经完成的这种方式,我遵循 mvvm 模式

我的 RetrofitApi

interface RetrofitApi {
@GET("endpoint")
suspend fun getApi():Response<RetrofitApiResponse>
}

我的网络模块

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule{

@Singleton
@Provides
fun provideApi(): RetrofitApi = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(RetrofitApi::class.java)

@Singleton
@Provides
fun provideRepository(retrofitApi:RetrofitApi) : MainRepository =
DefualtMainRepository(retrofitApi)

}

并且这个模块被注入(inject)到我的仓库中

 class DefualtMainRepository @Inject constructor(
val retrofitApi: RetrofitApi
):MainRepository {
override suspend fun getQuotes(): Resource<RetrofitApiResponse> {

val response = retrofitApi.getApi()
val result = response.body()
if (response.successful){

}
}
}

如果您有兴趣,我在我的 github 中有完整的项目,甚至还写了一篇中篇文章解释它,希望我的回答对您有所帮助 https://zaidzakir.medium.com/a-simple-android-app-using-mvvm-dagger-hilt-e9f45381f1bc

关于android - 使用 Hilt,如何注入(inject)没有上下文的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67597448/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com