使用 AndroidInjector 和 Kotlin 在 SubComponent 中提供方法
@Provides methods in SubComponent with AndroidInjector and Kotlin
我正在使用 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 @Module 添加静态 @Provides 方法。它必须是静态的,因为如果我向使用 @Binds:
的 @Module class 添加非静态方法,Dagger 会抱怨
Error:A @Module may not contain both non-static @Provides methods and
abstract @Binds or @Multibinds declarations
问题是:我如何使用 Kotlin 做到这一点?
我这样结束:
@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 class:ComponentModuleForProviders
.
我正在使用 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 @Module 添加静态 @Provides 方法。它必须是静态的,因为如果我向使用 @Binds:
的 @Module class 添加非静态方法,Dagger 会抱怨Error:A @Module may not contain both non-static @Provides methods and abstract @Binds or @Multibinds declarations
问题是:我如何使用 Kotlin 做到这一点?
我这样结束:
@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 class:ComponentModuleForProviders
.