Androidプロジェクトではなく、IntellijでDagger2を試したいと思い、調べつつ試してみた。
Intellijのkotlinプロジェクトを作成する。
build.gradleの初期状態はこうなってる。
build.gradle
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.70'
}
group 'org.ikemura23'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
Dagger2 導入する
dagger2をbuild.gradleに追加する。
また、kaptを有効にする記述も追加している。
build.gradle
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.70'
}
group 'org.ikemura23'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
apply plugin: 'kotlin-kapt' // kaptを有効にする記述を追加
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
// Dagger2 追加
implementation "com.google.dagger:dagger:2.27"
kapt "com.google.dagger:dagger-compiler:2.27"
}
// kaptを有効にする記述を追加
kapt {
generateStubs = true
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
IntelliJの設定を変更する
IntelliJ > Preferences を開いて、
Preferences | Build, Execution, Deployment | Build Tools | Gradle
IntelliJ IDEA から Gradle(Default)
に変更する。

これで設定は完了。
Daggerの動作確認
Component
DaggerAppComponent
を作成するためのComponentを作る。
@Component(modules = [AppModule::class])
interface AppComponent {
// Component.Factoryパターン
@Component.Factory
interface Factory {
fun create(): AppComponent
}
fun hoge(): Hoge
fun fugaProvider(): Provider<Fuga>
}
Module
@Module
class AppModule {
@Provides
fun provideHoge(): Hoge {
return Hoge()
}
@Provides
fun provideFuga(hoge: Hoge): Fuga {
return Fuga(hoge)
}
}
これでビルドするとDaggerAppComponent
が作成されて使用できればOK
main.kt
fun main(args: Array<String>) {
// hogeの取得
val hoge = DaggerAppComponent.factory().create().hoge()
// fugaの取得
val fuga = DaggerAppComponent.factory().create().fugaProvider().get()
}
使用コード