@ContributesAndroidInjectorを使ってActivityにDaggerでInjectする

みんなのKotlin 現場で役立つ最新ノウハウ!

新品価格
¥2,508から
(2020/1/29 21:00時点)


@Subcomponentを使ってActivityにDaggerでInjectする
の続編

次は@ContributesAndroidInjectorを使ってみる


・サブコンポーネントにする
AppComponent.kt

@Component(
    modules = [
        AndroidInjectionModule::class,
        ActivityBindingModule::class
    ]
)
interface AppComponent {
    @Singleton
    fun inject(app: MyApplication)
}

AppModule.kt

@Module
class AppModule {

    @Provides
    @Singleton
    fun provideMasterka(): Masterka {
        return Masterka()
    }
}

ActivityBindingModule.kt

@Module
interface ActivityBindingModule {

    @Singleton
    @ActivityScope
    @ContributesAndroidInjector(modules = [AppModule::class])
    fun contributeMainActivityInjector(): MainActivity
}

・全体で使えるようにする
AppComponent.kt

@Singleton
@Component(
    modules = [
        AndroidInjectionModule::class,
        AppModule::class,
        ActivityBindingModule::class
    ]
)
interface AppComponent {
    fun inject(app: MyApplication)
}

ActivityBindingModule.kt

@Module
interface ActivityBindingModule {

    @ActivityScope
    @ContributesAndroidInjector
    fun contributeMainActivityInjector(): MainActivity
}

 

全体で使えるようにするのか、しないのかで書き方変わりますが
@Subcomponentを使うよりは圧倒的にタイプ量減るので
Androidなら@ContributesAndroidInjector使う方が良いかなと思いました
まだまだDaggerの実験は続くよ

関連記事:

Pocket