「Android/kotlin/DaggerHilt」の版間の差分
提供: 初心者エンジニアの簡易メモ
| 行63: | 行63: | ||
setContentView(R.layout.activity_main) | setContentView(R.layout.activity_main) | ||
| + | Log.v("MainActivity", "onCreate!!") | ||
| + | usecase.print("MainActivity", "usecase.print!!") | ||
} | } | ||
} | } | ||
| 行96: | 行98: | ||
@Provides | @Provides | ||
fun provideHogeUseCase(hogeService: HogeService) : HogeUsecase { | fun provideHogeUseCase(hogeService: HogeService) : HogeUsecase { | ||
| + | Log.v("ApplicationProvides", "provideHogeUseCase!!") | ||
return HogeUsecase(hogeService) | return HogeUsecase(hogeService) | ||
} | } | ||
| 行111: | 行114: | ||
class HogeServiceImpl @Inject constructor(): HogeService { | class HogeServiceImpl @Inject constructor(): HogeService { | ||
override fun print(tag: String, message: String) { | override fun print(tag: String, message: String) { | ||
| − | Log.v( | + | Log.v("HogeServiceImpl", "print!! tag=$tag message=$message") |
} | } | ||
} | } | ||
| 行122: | 行125: | ||
class HogeUsecase @Inject constructor(private val service: HogeService) { | class HogeUsecase @Inject constructor(private val service: HogeService) { | ||
fun print(tag: String, message: String) { | fun print(tag: String, message: String) { | ||
| + | Log.v("HogeUsecase", "print!! tag=$tag message=$message") | ||
service.print(tag, message) | service.print(tag, message) | ||
} | } | ||
| 行127: | 行131: | ||
</pre> | </pre> | ||
| + | 出力 | ||
| + | <pre> | ||
| + | V/ApplicationProvides: provideHogeUseCase!! | ||
| + | V/MainActivity: onCreate!! | ||
| + | V/HogeUsecase: print!! tag=MainActivity message=usecase.print!! | ||
| + | V/HogeServiceImpl: print!! tag=MainActivity message=usecase.print!! | ||
| + | </pre> | ||
==参考== | ==参考== | ||
https://medium.com/kaleidot725/%E8%A9%B1%E9%A1%8C%E3%81%AE-dagger-hilt-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F-13acab8163e0 | https://medium.com/kaleidot725/%E8%A9%B1%E9%A1%8C%E3%81%AE-dagger-hilt-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F-13acab8163e0 | ||
2021年2月12日 (金) 21:26時点における版
サンプル
プロジェクト直のbuild.gradleに以下追加
buildscript {
dependencies {
classpath "com.android.tools.build:gradle:4.1.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
def dagger_hilt_version = "2.31-alpha"
classpath "com.google.dagger:hilt-android-gradle-plugin:${dagger_hilt_version}"
}
}
app/build.gradleに以下追加
plugins {
id 'kotlin-kapt'
id 'dagger.hilt.android.plugin'
}
dependencies {
def dagger_hilt_version = "2.31.2-alpha"
implementation "com.google.dagger:hilt-android:${dagger_hilt_version}"
kapt "com.google.dagger:hilt-android-compiler:${dagger_hilt_version}"
def dagger_hilt_view_model_version = "1.0.0-alpha03"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:${dagger_hilt_view_model_version}"
kapt "androidx.hilt:hilt-compiler:${dagger_hilt_view_model_version}"
}
applicationを追加
MainApplication.kt
import android.app.Application import dagger.hilt.android.HiltAndroidApp @HiltAndroidApp class MainApplication : Application()
AndoridManifest.xml のandroid:nameにpathを追加
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.daggerhiltapplication">
<application
android:name="com.example.daggerhiltapplication.MainApplication"
MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject
lateinit var usecase: HogeUsecase
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.v("MainActivity", "onCreate!!")
usecase.print("MainActivity", "usecase.print!!")
}
}
サービスとユースケースの読み込みモジュール
ApplicationBindsModule.kt
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
abstract class ApplicationBindsModule {
@Binds
abstract fun bindHogeService(hogeServiceImpl: HogeServiceImpl) : HogeService
}
ApplicationProvidesModule.kt
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
object ApplicationProvidesModule {
@Provides
fun provideHogeUseCase(hogeService: HogeService) : HogeUsecase {
Log.v("ApplicationProvides", "provideHogeUseCase!!")
return HogeUsecase(hogeService)
}
}
HogeService.kt
import android.util.Log
import javax.inject.Inject
interface HogeService {
fun print(tag: String, message: String)
}
class HogeServiceImpl @Inject constructor(): HogeService {
override fun print(tag: String, message: String) {
Log.v("HogeServiceImpl", "print!! tag=$tag message=$message")
}
}
HogeUsecase.kt
import javax.inject.Inject
class HogeUsecase @Inject constructor(private val service: HogeService) {
fun print(tag: String, message: String) {
Log.v("HogeUsecase", "print!! tag=$tag message=$message")
service.print(tag, message)
}
}
出力
V/ApplicationProvides: provideHogeUseCase!! V/MainActivity: onCreate!! V/HogeUsecase: print!! tag=MainActivity message=usecase.print!! V/HogeServiceImpl: print!! tag=MainActivity message=usecase.print!!
