android - Kotlin 延迟初始化与 Dagger 延迟注入(inject)

标签 android kotlin dependency-injection dagger-2 lazy-initialization

我有一个带有 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/

相关文章:

android - Appbar 在 Android 设计库 22.2.1 与 22.2.0 中滚动

android - 如何在位图上绘制粗体文本?

android - 在 Android SDK 类上对 Kotlin 扩展功能进行单元测试

android - 如何在 Kotlin 中比较图像文件名和字符串?

grails - 使用junit在grails 2.5中设置集成测试的正确方法是什么?

java - 如何在 Java EE 中注入(inject)外部定义的类

android - 为什么 ScrollView 在我的 Activity 中造成间隙?

android - ScrollView 中的 ViewPager

kotlin - Jacoco不生成xml文件

dependency-injection - NestJS : Inject Service into Models/Entities