我有一个带有 OkHttpClient
提供者方法的模块像这样:
@Provides
@Singleton
fun provideOkHttpClient(interceptor: HttpLoggingInterceptor): OkHttpClient {
return OkHttpClient.Builder().addInterceptor(interceptor).build()
}
以及 Retrofit
的另一种提供者方法像这样:@Provides
@Singleton
fun provideRetrofitBuilder(client: Lazy<OkHttpClient>,gson: Gson): Retrofit {
....
}
现在提供 Retrofit
接受一个懒惰注入(inject)的OkHttpClient
其中Dagger
已经知道如何创建,即用来自 dagger
的 Lazy 包装包裹。 我的问题是如果将其包装在来自 dagger
的 Lazy 中,行为是否会有所不同?根据我的理解,它在第一次调用 get() 时计算它的值,并为所有后续调用 get() 记住相同的值,而不是从 kotlin
包装在 Lazy 中时。获取当前惰性实例的惰性初始化值的包?是否可以使用 kotlin
中的 Lazy?包,这将如何发挥作用?他们提供相同的行为吗?感谢您的时间 :)
最佳答案
我刚试过,kotlin.Lazy
的变种没有编译:
error: [Dagger/MissingBinding] kotlin.Lazy<? extends com.mycompany.MyClass> cannot be provided without an @Provides-annotated method.
所以不,不可能使用 Lazy
来自 kotlin
用于依赖注入(inject)。至少不是到处都是。
关于android - Kotlin 延迟初始化与 Dagger 延迟注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65993403/