匕首不能@Inject一些相同类的实例

时间:2019-02-27 17:22:51

标签: android kotlin dependency-injection system.reactive dagger

我遇到了一个奇怪的问题。 我需要注入两个调度程序。用于ui和异步操作。我有RxModule类:

@Module
class RxModule {

@Named(Keys.SCHEDULER_UI)
@Provides
@Singleton
fun provideUiScheduler(): Scheduler = AndroidSchedulers.mainThread()

@Named(Keys.SCHEDULER_ASYNC)
@Provides
@Singleton
fun provideAsyncScheduler(): Scheduler = Schedulers.io()
}

然后将它们作为

注入到我的演示者中
@Named(Keys.SCHEDULER_UI)
@Inject
lateinit var uiScheduler: Scheduler

@Named(Keys.SCHEDULER_ASYNC)
@Inject
lateinit var asyncScheduler: Scheduler

但是Dagger却倒下了:

io.reactivex.Scheduler cannot be provided without an @Provides- or @Produces-annotated method

注射看起来很简单:

ApplicationLoader.instance.getApplicationComponent().inject(presenter)

我的AppComponent:

@Component(modules = [RxModule::class, ApplicationModule::class, WebModule::class, RepositoryModule::class])
@Singleton
interface AppComponent {
    fun inject(presenter: MainPresenter)
    fun inject(presenter: AppDetailsPresenter)
}

有人遇到同样的问题吗?预先感谢

1 个答案:

答案 0 :(得分:0)

因此,经过一段时间的研究,我找到了解决方案。在使用@Named的同时使用@Inject的Kotlin中,您应该以其他方式执行此操作。您注入的内容应如下所示:

@field:[Inject Named(Keys.SCHEDULER_UI)]
lateinit var uiScheduler: Scheduler
@field:[Inject Named(Keys.SCHEDULER_ASYNC)]
lateinit var asyncScheduler: Scheduler