为什么 Dagger2 中的异步依赖注入不起作用?
Why async dependency injection in Dagger2 is not working?
我在方法中有依赖注入,它很慢,这就是为什么
我尝试异步注入依赖项,但它无法正常工作。
我在 featuredCalendar() 中有一些日志,它打印日志 "step1"
但不打印 "step2"
@Singleton
@Provides
fun apiDaysSeResource(retrofit: Retrofit): Observable<ApiDaysSeResource{
return Observable.create(ObservableOnSubscribe<ApiDaysSeResource> {
retrofit.create<ApiDaysSeResource>(ApiDaysSeResource::class.java)
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
public interface ApiDaysSeResource {
@GET("dagar.json?")
Single<FeaturedCalendar> days(@Query("fran") String fran, @Query("till") String till, @Query("key") String key, @Query("id") String id);
}
@Singleton
@Provides
fun vacationRepository(apiDaysSeResource: Observable<ApiDaysSeResource>): VacationRepository {
return VacationRepository(apiDaysSeResource)
}
class VacationRepository(private val apiDaysSeResource: Observable<ApiDaysSeResource>) {
fun featuredCalendar(from: String, till: String, key: String, id: String): Flowable<FeaturedCalendar> {
Log.i("time_test", " step1")
return apiDaysSeResource.flatMapSingle { apiDaysSeResource ->
Log.i("time_test", " step2")
apiDaysSeResource.days(from, till, key, id)
}.toFlowable(BackpressureStrategy.BUFFER)
}
}
我已经解决了我的问题我做了一些小改动
也看看这个样本
https://github.com/frogermcs/Dagger2Recipes-AsyncInjection
@Singleton
@Provides
fun apiDaysSeResource(retrofit:Retrofit):ApiDaysSeResource{
return retrofit.create(ApiDaysSeResource::class.java)}
@Singleton
@Provides
fun apiDaysSeResourceObservable(apiDaysResource: Lazy<ApiDaysSeResource>): Observable<ApiDaysSeResource> {
return Observable.defer { Observable.just(apiDaysResource.get()) }
}
我在方法中有依赖注入,它很慢,这就是为什么 我尝试异步注入依赖项,但它无法正常工作。 我在 featuredCalendar() 中有一些日志,它打印日志 "step1" 但不打印 "step2"
@Singleton
@Provides
fun apiDaysSeResource(retrofit: Retrofit): Observable<ApiDaysSeResource{
return Observable.create(ObservableOnSubscribe<ApiDaysSeResource> {
retrofit.create<ApiDaysSeResource>(ApiDaysSeResource::class.java)
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
}
public interface ApiDaysSeResource {
@GET("dagar.json?")
Single<FeaturedCalendar> days(@Query("fran") String fran, @Query("till") String till, @Query("key") String key, @Query("id") String id);
}
@Singleton
@Provides
fun vacationRepository(apiDaysSeResource: Observable<ApiDaysSeResource>): VacationRepository {
return VacationRepository(apiDaysSeResource)
}
class VacationRepository(private val apiDaysSeResource: Observable<ApiDaysSeResource>) {
fun featuredCalendar(from: String, till: String, key: String, id: String): Flowable<FeaturedCalendar> {
Log.i("time_test", " step1")
return apiDaysSeResource.flatMapSingle { apiDaysSeResource ->
Log.i("time_test", " step2")
apiDaysSeResource.days(from, till, key, id)
}.toFlowable(BackpressureStrategy.BUFFER)
}
}
我已经解决了我的问题我做了一些小改动 也看看这个样本 https://github.com/frogermcs/Dagger2Recipes-AsyncInjection
@Singleton
@Provides
fun apiDaysSeResource(retrofit:Retrofit):ApiDaysSeResource{
return retrofit.create(ApiDaysSeResource::class.java)}
@Singleton
@Provides
fun apiDaysSeResourceObservable(apiDaysResource: Lazy<ApiDaysSeResource>): Observable<ApiDaysSeResource> {
return Observable.defer { Observable.just(apiDaysResource.get()) }
}