【问题标题】:@Provides methods in SubComponent with AndroidInjector and Kotlin@Provides 使用 AndroidInjector 和 Kotlin 在 SubComponent 中提供方法
【发布时间】:2017-11-21 11:37:09
【问题描述】:

我正在使用 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,我可以将静态 @Provides 方法添加到 ComponentModule @Module。它必须是静态的,因为如果我向使用 @Binds 的 @Module 类添加非静态方法,Dagger 会抱怨:

错误:一个@Module 不能同时包含非静态@Provides 方法和 抽象的@Binds 或@Multibinds 声明

问题是:如何使用 Kotlin 做到这一点?

【问题讨论】:

    标签: android kotlin dagger-2 androidinjector


    【解决方案1】:

    我以这个结尾:

    @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

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 2020-05-20
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 2023-03-25
      • 1970-01-01
      • 2017-08-02
      相关资源
      最近更新 更多