「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!!