agger2入門 - basic(@Module & @Provides)
概要
-
dagger2入門 - basic(@Inject & @Component)にdagger2の基本的な使い方を紹介した
- ひとつの問題があって、今回は導入したパッケージのクラスの導入方法を紹介する
詳細
@Injectなしの基本クラスを定義する
class Age {
fun myAge(): String {
return "22"
}
}
abstract class Citer {
abstract fun doWhat(): String
}
class Student(val age: Age) {
fun doWhat(): String {
return age.myAge()
}
}
class Worker : Citer() {
override fun doWhat(): String {
return "work"
}
}
モジュールで上記のクラスを導入する
@Module
class CiterModule {
@Provides
fun provideAge(): Age {
return Age()
}
@Provides
fun providedStudent(age: Age): Student {
return Student(age)
}
@Provides
fun providedWorker(): Worker {
return Worker()
}
}
コンポネントを定義するときに、モジュールを導入する
@Component(modules = [CiterModule::class])
interface CiterComponent {
fun inject(house: House)
}
同じ方法で注入する
class House {
@Inject
lateinit var student: Student
@Inject
lateinit var worker: Worker
init {
DaggerCiterComponent.create().inject(this)
}
fun showTime() {
println(student.doWhat())
println(worker.doWhat())
}
}
fun main(args: Array<String>) {
val house = House()
house.showTime()
}
結果
22
work
Process finished with exit code 0
遷移図
@Injectなしの基本クラスを定義する
class Age {
fun myAge(): String {
return "22"
}
}
abstract class Citer {
abstract fun doWhat(): String
}
class Student(val age: Age) {
fun doWhat(): String {
return age.myAge()
}
}
class Worker : Citer() {
override fun doWhat(): String {
return "work"
}
}
モジュールで上記のクラスを導入する
@Module
class CiterModule {
@Provides
fun provideAge(): Age {
return Age()
}
@Provides
fun providedStudent(age: Age): Student {
return Student(age)
}
@Provides
fun providedWorker(): Worker {
return Worker()
}
}
コンポネントを定義するときに、モジュールを導入する
@Component(modules = [CiterModule::class])
interface CiterComponent {
fun inject(house: House)
}
同じ方法で注入する
class House {
@Inject
lateinit var student: Student
@Inject
lateinit var worker: Worker
init {
DaggerCiterComponent.create().inject(this)
}
fun showTime() {
println(student.doWhat())
println(worker.doWhat())
}
}
fun main(args: Array<String>) {
val house = House()
house.showTime()
}
結果
22
work
Process finished with exit code 0
遷移図
@Module
class CiterModule {
@Provides
fun provideAge(): Age {
return Age()
}
@Provides
fun providedStudent(age: Age): Student {
return Student(age)
}
@Provides
fun providedWorker(): Worker {
return Worker()
}
}
@Component(modules = [CiterModule::class])
interface CiterComponent {
fun inject(house: House)
}
class House {
@Inject
lateinit var student: Student
@Inject
lateinit var worker: Worker
init {
DaggerCiterComponent.create().inject(this)
}
fun showTime() {
println(student.doWhat())
println(worker.doWhat())
}
}
fun main(args: Array<String>) {
val house = House()
house.showTime()
}
22
work
Process finished with exit code 0
サンプルコード
Author And Source
この問題について(agger2入門 - basic(@Module & @Provides)), 我々は、より多くの情報をここで見つけました https://qiita.com/alingogo/items/ad310f41eda3fec13ffa著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .