我有一个具有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的提供者引入了一个懒散的注入的OkHttpClient,Dagger已经知道如何创建,即使用dagger包中的Lazy包装。,我的问题是,如果它被封装在dagger包中,那么行为是否会有区别?据我理解,dagger包在get()的第一次调用中计算它的值,并记住所有后续调用get()与封装在Lazy kotlin包中的值相同,后者得到当前实例的延迟初始化值?甚至有可能使用kotlin包中的Lazy,这将如何进行呢?他们提供同样的行为吗?谢谢你抽出时间:)
发布于 2021-12-09 19:07:08
我只是尝试了一下,但是带有kotlin.Lazy的变体没有编译:
error: [Dagger/MissingBinding] kotlin.Lazy<? extends com.mycompany.MyClass> cannot be provided without an @Provides-annotated method.因此,不可能将Lazy从kotlin中用于依赖注入。至少不是到处都有。
https://stackoverflow.com/questions/65993403
复制相似问题