【发布时间】:2016-08-31 13:19:16
【问题描述】:
我确实有两个自定义注释
@Qualifier
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
annotation class IOScheduler
和
@Qualifier
@kotlin.annotation.Retention(AnnotationRetention.RUNTIME)
annotation class UIScheduler
我在我的模块中使用它们
@Module
class UiModule {
@Provides
@UIScheduler
fun provideUiScheduler(): Scheduler = AndroidSchedulers.mainThread()
@Provides
@IOScheduler
fun provideIOScheduler(): Scheduler = Schedulers.io()
}
当然模块已添加到我的组件中,当我尝试注入它们时,它会说
rx.Scheduler 不能在没有@Provides 的情况下提供- 或 @Produces-注解的方法。
注射
class MainPresenter(val view: MainContract.View) : MainContract.Presenter {
@Inject lateinit var api: ApiServices
@Inject lateinit var databaseManager: DatabaseManager
@Inject @UIScheduler lateinit var observeScheduler: Scheduler
@Inject @IOScheduler lateinit var subscribeScheduler: Scheduler
...
}
有趣的是,我在为我的 ApiClient 注入 Gson 时使用几乎相同的想法,并且效果很好
@Module
class ApiModule {
...
@Provides
@Singleton
@DefaultGson
fun providesGson(): Gson = GsonBuilder().create()
@Provides
@Singleton
@FormatDateGson
fun providesGsonFormatTimestamp(): Gson = GsonBuilder().setDateFormat(Constants.TIME_STAMP_FORMAT).create()
}
@Singleton
class ApiClient @Inject constructor(@DefaultGson val gson: Gson, val sharedPreferences: SharedPrefsUtils) {
...
}
另外,我可以说我的 java 项目中确实有相同的模块/提供程序结构,它工作得很好。
【问题讨论】:
标签: android rx-java kotlin dagger-2 rx-android