最近Dagger看得晕头转向的,今天就来写个简单的demo,跑一跑,在一个Activity中注入一个对象,然后显示这个对象的信息,就这样
使用语言 Kotlin
dependencies
dependencies {
implementation 'com.google.dagger:dagger:2.17'
kapt 'com.google.dagger:dagger-compiler:2.17'
}
Student
创建一个Student类
package com.example.myapplication
class Student constructor(username: String){
var name: String? = null
init {
this.name = username
}
override fun toString(): String {
return String.format("我叫%s", name)
}
}
MainActivityModule
创建一个Module类,用@Module注解
package com.example.myapplication
import dagger.Module
import dagger.Provides
@Module
class MainActivityModule {
@Provides
fun provideApiService(): Student = Student("testName")
}
MainActivityComponent
创建一个Component类,用@Component注解,这是一个注入类,先依样画葫芦照着写就是了,inject方法的参数是我们要在里面注入对象的MainActivity
package com.example.myapplication
import dagger.Component
@Component(modules = arrayOf(MainActivityModule::class))
interface MainActivityComponent {
fun inject(activity: MainActivity?)
}
MainActivity
在MainActivity里写一个全局变量student,用@Inject注解
然后在onCreate里调用DaggerMainActivityComponent.create().inject(this)就可以成功注入student了
接下来就可以使用这个对象了
如果报找不到DaggerMainActivityComponent可以先菜单Build->Make Project编译一下
package com.example.myapplication
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import javax.inject.Inject
class MainActivity : AppCompatActivity() {
@Inject
@JvmField
var student: Student? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycle.addObserver(MyObserver())
DaggerMainActivityComponent.create().inject(this)
Log.e("txhlog","student="+student.toString());
}
}