「Android/kotlin/Dagger2」の版間の差分
提供: 初心者エンジニアの簡易メモ
細 (Admin がページ「Android/kotlin/dagger2」を「Android/kotlin/Dagger2」に、リダイレクトを残さずに移動しました) |
|||
(同じ利用者による、間の6版が非表示) | |||
行3: | 行3: | ||
==サンプル== | ==サンプル== | ||
− | + | dagger2を使って、例として、50歳までの年数を取得する方法 | |
app/build.gradle | app/build.gradle | ||
行20: | 行20: | ||
MainActivity.kt | MainActivity.kt | ||
− | |||
<pre> | <pre> | ||
package com.example.daggerapplication | package com.example.daggerapplication | ||
行44: | 行43: | ||
component.inject(this) | component.inject(this) | ||
− | Log.i("MainActivity", " | + | viewModel.defaultAge() |
+ | Log.i("MainActivity", "diff50Age=" + viewModel.getDiff50Age()) | ||
} | } | ||
} | } | ||
行68: | 行68: | ||
class MainViewModel @Inject constructor(private val userRepository: IUserRepository) { | class MainViewModel @Inject constructor(private val userRepository: IUserRepository) { | ||
− | fun age(): Int { | + | fun defaultAge() { |
− | return userRepository. | + | userRepository.age = 12; |
+ | } | ||
+ | fun getDiff50Age(): Int { | ||
+ | return userRepository.getDiff50Age() | ||
} | } | ||
} | } | ||
行95: | 行98: | ||
class UserRepository : IUserRepository { | class UserRepository : IUserRepository { | ||
− | override | + | override var age: Int = 0 |
− | return | + | override fun getDiff50Age(): Int { |
+ | return 50 - age | ||
} | } | ||
} | } | ||
行116: | 行120: | ||
import dagger.Module | import dagger.Module | ||
import dagger.Provides | import dagger.Provides | ||
− | |||
@Module | @Module | ||
行127: | 行130: | ||
</pre> | </pre> | ||
+ | ===上記サンプルの説明=== | ||
+ | ViewModelModuleは各種ViewModelを一覧で登録するもの。 | ||
+ | RepositoryModuleは各種Repositoryを一覧で登録するもの。 | ||
+ | アプリなどによって、UserRepositoryとMainViewModelに必要なコードを記述してく。 | ||
==参考== | ==参考== |
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に必要なコードを記述してく。