close

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"

arrow
arrow
    全站熱搜

    JBLin 發表在 痞客邦 留言(0) 人氣()