1.gradle引用
apply plugin: 'kotlin-kapt'
implementation 'com.google.dagger:dagger:2.24'
kapt 'com.google.dagger:dagger-compiler:2.24'
implementation 'com.google.dagger:dagger-android:2.24'
implementation 'com.google.dagger:dagger-android-support:2.24'
kapt 'com.google.dagger:dagger-android-processor:2.24'
2.Component
@Singleton
@Component(modules = [TestModule::class, AndroidInjectionModule::class, DaggerModule::class])
interface DaggerComponent {
fun inject(application: MyApp?)
}
3.Model
@Module
abstract class DaggerModule {
@ContributesAndroidInjector
abstract fun getMainActivity(): MainActivity
}
@Module
class TestModule {
@Provides
fun getTestUtil1():TestUtil{
return TestUtil()
}
}
4.Application
class MyApp : Application(), HasAndroidInjector {
@Inject lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Any>
override fun onCreate() {
super.onCreate()
DaggerDaggerComponent.create().inject(this)
}
override fun androidInjector(): AndroidInjector<Any> {
return dispatchingAndroidInjector
}
}
5.Activity
class MyApp : Application(), HasAndroidInjector {
@Inject lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Any>
override fun onCreate() {
super.onCreate()
DaggerDaggerComponent.create().inject(this)
}
override fun androidInjector(): AndroidInjector<Any> {
return dispatchingAndroidInjector
}
}
6.動態注入測試物件
class TestNewUtil @Inject constructor() {
@Inject lateinit var util: TestUtil
fun print() {
Log.d("test", "1234:" + util.toString())
}
}
class TestUtil @Inject constructor(){
}
7.Manifest.xml綁定Application
android:name=".MyApp"