dagger.android 在kotlin的簡單實用

kotlin dagger.android 小例子

開發環境

版本
Android studio 3.5
Gradle 5.4.1

dagger2是幹嘛呢?

dagger2 其實就是類似springmvc中的AOP面向切面編程,主要作用方便解耦, 通過自定義註解和apt插件在適當的時間創建對象和
銷燬對象。

源碼

github
csdn

下面的用一個簡單小例子,展示下kotlin+dagger2的使用

gradle配置

  1. 主項目 build.gradle 加入 apply plugin: 'kotlin-kapt'
    [外鏈圖片轉存失敗(img-cTl8lGQZ-1567167266850)()]
  2. 需要的依賴
/* Dagger 2 */
        implementation 'com.google.dagger:dagger:2.24'
        implementation 'com.google.dagger:dagger-android-support:2.24'
        kapt 'com.google.dagger:dagger-compiler:2.24'
        kapt 'com.google.dagger:dagger-android-processor:2.24'   

kotlin代碼

  1. User
    /**
     * 構造方法添加 @Inject 註解
     */
    data class User @Inject constructor(val name: String, val age: Int)
  1. UserModule
    @Module
    object BeanModule {
    
        @JvmStatic
        @Provides
        fun name() = "xxx"
    
        @JvmStatic
        @Provides
        @Named("ag")
        fun age1() = 1234
    
        @JvmStatic
        @Provides
        @Named("ags")
        fun age22() = 2132
        
        @JvmStatic
        @Provides
        fun injectUser(
            name: String, //String 類型 會對應找當前Module中String類型,賦值
            @Named("ag") age: Int //當一個module內有多個相同類型時候,可以通過Named註解進行區分
        ): User =
            User(name, age)
    
    }
  1. ActivityModule
    
    @Module
    abstract class ActivityModule {
    
        @ContributesAndroidInjector(
            modules = [
                BeanModule::class
            ]
        )
        abstract fun injectScrollingActivity(): ScrollingActivity
    
    }
    
  1. ApplicationComponent 接口,創建完之後需要build下工程,通過kapt插件創建DaggerApplicationComponent
  
  //單例
  @Singleton
  @Component(
      modules = [ActivityModule::class,
          AndroidSupportInjectionModule::class
      ]
  )
  interface ApplicationComponent : AndroidInjector<App> {
  
      //這個可以不用寫,生成的時候直接用build 不用create
  //    @Component.Builder
  //    abstract class Builder : AndroidInjector.Builder<App>()
  
  }
    
  1. App
    /**
     * Application 需要繼承 DaggerApplication
     */
    class App : DaggerApplication() {
    
        /**
         * @see DaggerApplicationComponent 是 ApplicationComponent接口的實現類
         */
    
        override fun applicationInjector():
                AndroidInjector<out DaggerApplication> = DaggerApplicationComponent.builder().build()
    }
  1. 在ScrollingActivity使用
    
    class ScrollingActivity : DaggerAppCompatActivity() {
    
        @Inject
        lateinit var user: User
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_scrolling)
            //使用user
            Log.e("onCreate", "user $user")
    
        }
    }

項目中還有一個簡單的mvp 直接看代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章