我用的是Dagger2 AndroidInjector和Kotlin。我有一个子组件,它的模块是这样定义的:
@Subcomponent(modules = arrayOf(
UIModule::class,
HomeActivitySubcomponent.ComponentModule::class
))
interface HomeActivitySubcomponent : AndroidInjector<HomeActivity> {
@Subcomponent.Builder
abstract class Builder : AndroidInjector.Builder<HomeActivity>()
@Module
abstract class ComponentModule {
@Binds
@IntoMap
@ActivityKey(HomeActivity::class)
internal abstract fun bindMainActivityInjectorFactory(builder: Builder): AndroidInjector.Factory<out Activity>
}
}如果这是java,我可以向ComponentModule @模块添加一个静态@Provides方法。它必须是静态的,因为Dagger抱怨如果我向使用@Binds的@Module类添加了一个非静态方法:
错误:@模块不能同时包含非静态的方法和抽象的@Binds或@Multibinds声明。
问题是:我怎么才能和Kotlin做这件事?
发布于 2017-11-23 17:14:11
我的结尾是:
@Subcomponent(modules = arrayOf(
UIModule::class,
HomeActivitySubcomponent.ComponentModuleForProviders::class,
HomeActivitySubcomponent.ComponentModule::class
))
interface HomeActivitySubcomponent : AndroidInjector<HomeActivity> {
@Subcomponent.Builder
abstract class Builder : AndroidInjector.Builder<HomeActivity>()
@Module
abstract class ComponentModule {
@Suppress("unused")
@Binds
@IntoMap
@ActivityKey(HomeActivity::class)
internal abstract fun bindMainActivityInjectorFactory(builder: Builder): AndroidInjector.Factory<out Activity>
}
@Module
open class ComponentModuleForProviders {
@Provides
open fun provideDrawerPresenter(): DrawerPresenter {...}
}
}因此,我为@Provides方法使用了第二个@Module类:ComponentModuleForProviders。
https://stackoverflow.com/questions/47412194
复制相似问题