「Android/kotlin/Dagger2」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「==dagger2とは== Google製のDIライブラリ ==サンプル== app/build.gradle <pre> apply plugin: 'kotlin-kapt' dependencies { implementation "com.google....」) |
細 (Admin がページ「Android/kotlin/dagger2」を「Android/kotlin/Dagger2」に、リダイレクトを残さずに移動しました) |
||
| (同じ利用者による、間の9版が非表示) | |||
| 行3: | 行3: | ||
==サンプル== | ==サンプル== | ||
| + | dagger2を使って、例として、50歳までの年数を取得する方法 | ||
| + | |||
app/build.gradle | app/build.gradle | ||
| 行9: | 行11: | ||
dependencies { | dependencies { | ||
| − | implementation | + | def dagger_version = 2.27 |
| − | annotationProcessor "com.google.dagger:dagger-compiler: | + | implementation "com.google.dagger:dagger:$dagger_version" |
| − | kapt | + | annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version" |
| − | kaptTest | + | kapt "com.google.dagger:dagger-compiler:$dagger_version" |
| + | kaptTest "com.google.dagger:dagger-compiler:$dagger_version" | ||
} | } | ||
</pre> | </pre> | ||
| + | MainActivity.kt | ||
| + | <pre> | ||
| + | package com.example.daggerapplication | ||
| + | |||
| + | import androidx.appcompat.app.AppCompatActivity | ||
| + | import android.os.Bundle | ||
| + | import android.util.Log | ||
| + | import javax.inject.Inject | ||
| + | |||
| + | class MainActivity : AppCompatActivity() { | ||
| + | @Inject | ||
| + | lateinit var viewModel: MainViewModel | ||
| + | |||
| + | private val component = DaggerMainActivityComponent.builder() | ||
| + | .viewModelModule(ViewModelModule()) | ||
| + | .repositoryModule(RepositoryModule()) | ||
| + | .build() | ||
| + | |||
| + | override fun onCreate(savedInstanceState: Bundle?) { | ||
| + | super.onCreate(savedInstanceState) | ||
| + | setContentView(R.layout.activity_main) | ||
| + | |||
| + | component.inject(this) | ||
| + | |||
| + | viewModel.defaultAge() | ||
| + | Log.i("MainActivity", "diff50Age=" + viewModel.getDiff50Age()) | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | MainActivityComponent.kt | ||
| + | <pre> | ||
| + | package com.example.daggerapplication | ||
| + | |||
| + | import dagger.Component | ||
| + | |||
| + | @Component(modules = [ViewModelModule::class, RepositoryModule::class]) | ||
| + | interface MainActivityComponent { | ||
| + | fun inject(activity: MainActivity) | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | MainViewModel.kt | ||
| + | <pre> | ||
| + | package com.example.daggerapplication | ||
| + | |||
| + | import javax.inject.Inject | ||
| + | |||
| + | class MainViewModel @Inject constructor(private val userRepository: IUserRepository) { | ||
| + | fun defaultAge() { | ||
| + | userRepository.age = 12; | ||
| + | } | ||
| + | fun getDiff50Age(): Int { | ||
| + | return userRepository.getDiff50Age() | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | RepositoryModule.kt | ||
| + | <pre> | ||
| + | package com.example.daggerapplication | ||
| + | |||
| + | import dagger.Module | ||
| + | import dagger.Provides | ||
| + | |||
| + | @Module | ||
| + | class RepositoryModule { | ||
| + | @Provides | ||
| + | fun provideUserRepository(): IUserRepository { | ||
| + | return UserRepository() | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | UserRepository.kt | ||
| + | <pre> | ||
| + | package com.example.daggerapplication | ||
| + | |||
| + | class UserRepository : IUserRepository { | ||
| + | override var age: Int = 0 | ||
| + | override fun getDiff50Age(): Int { | ||
| + | return 50 - age | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | IUserRepository.kt | ||
| + | <pre> | ||
| + | package com.example.daggerapplication | ||
| + | |||
| + | interface IUserRepository { | ||
| + | fun age(): Int | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | ViewModelModule.kt | ||
| + | <pre> | ||
| + | package com.example.daggerapplication | ||
| + | |||
| + | import dagger.Module | ||
| + | import dagger.Provides | ||
| + | |||
| + | @Module | ||
| + | class ViewModelModule { | ||
| + | @Provides | ||
| + | fun provideMainViewModel(userRepository: IUserRepository): MainViewModel { | ||
| + | return MainViewModel(userRepository) | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | ===上記サンプルの説明=== | ||
| + | ViewModelModuleは各種ViewModelを一覧で登録するもの。 | ||
| + | RepositoryModuleは各種Repositoryを一覧で登録するもの。 | ||
| + | アプリなどによって、UserRepositoryとMainViewModelに必要なコードを記述してく。 | ||
| + | |||
| + | ==参考== | ||
| + | https://qiita.com/sudachi808/items/a05237e1294639ea41dd | ||
| − | + | https://qiita.com/iTakahiro/items/c9203f5ad886b7ddae2f | |
2021年2月9日 (火) 04:02時点における最新版
dagger2とは
Google製のDIライブラリ
サンプル
dagger2を使って、例として、50歳までの年数を取得する方法
app/build.gradle
apply plugin: 'kotlin-kapt'
dependencies {
def dagger_version = 2.27
implementation "com.google.dagger:dagger:$dagger_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kaptTest "com.google.dagger:dagger-compiler:$dagger_version"
}
MainActivity.kt
package com.example.daggerapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import javax.inject.Inject
class MainActivity : AppCompatActivity() {
@Inject
lateinit var viewModel: MainViewModel
private val component = DaggerMainActivityComponent.builder()
.viewModelModule(ViewModelModule())
.repositoryModule(RepositoryModule())
.build()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
component.inject(this)
viewModel.defaultAge()
Log.i("MainActivity", "diff50Age=" + viewModel.getDiff50Age())
}
}
MainActivityComponent.kt
package com.example.daggerapplication
import dagger.Component
@Component(modules = [ViewModelModule::class, RepositoryModule::class])
interface MainActivityComponent {
fun inject(activity: MainActivity)
}
MainViewModel.kt
package com.example.daggerapplication
import javax.inject.Inject
class MainViewModel @Inject constructor(private val userRepository: IUserRepository) {
fun defaultAge() {
userRepository.age = 12;
}
fun getDiff50Age(): Int {
return userRepository.getDiff50Age()
}
}
RepositoryModule.kt
package com.example.daggerapplication
import dagger.Module
import dagger.Provides
@Module
class RepositoryModule {
@Provides
fun provideUserRepository(): IUserRepository {
return UserRepository()
}
}
UserRepository.kt
package com.example.daggerapplication
class UserRepository : IUserRepository {
override var age: Int = 0
override fun getDiff50Age(): Int {
return 50 - age
}
}
IUserRepository.kt
package com.example.daggerapplication
interface IUserRepository {
fun age(): Int
}
ViewModelModule.kt
package com.example.daggerapplication
import dagger.Module
import dagger.Provides
@Module
class ViewModelModule {
@Provides
fun provideMainViewModel(userRepository: IUserRepository): MainViewModel {
return MainViewModel(userRepository)
}
}
上記サンプルの説明
ViewModelModuleは各種ViewModelを一覧で登録するもの。 RepositoryModuleは各種Repositoryを一覧で登録するもの。 アプリなどによって、UserRepositoryとMainViewModelに必要なコードを記述してく。
