亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

詳解Kotlin 中使用和配置 Dagger2

2024-07-21 23:03:40
字體:
來源:轉載
供稿:網友

前言

陸陸續續幾篇文章已經講解了項目中 Kotlin 如何配置、簡單語法、DataBinding 配置,接下來就要說到 Kotlin 中的 Dagger2 了。

配置 Dagger2

項目中使用 Dagger2 ,首先還是添加依賴。同樣的,因為要使用到注解處理,所以和 DataBinding 一樣要添加 kapt 插件:

 apply plugin: 'com.android.application' ... apply plugin: 'kotlin-kapt' // kapt 插件 ... kapt {   generateStubs = true } dependencies {   ...   implementation 'com.google.dagger:dagger:2.12' // Dagger 2 依賴   implementation 'com.google.dagger:dagger-android-support:2.12' // Dagger 2 Android 支持包   kapt 'com.google.dagger:dagger-compiler:2.12' // Dagger 2 注解處理 }

配置很簡單,就這樣完成了。

使用 Dagger2

簡單的配置完 Dagger2 ,接下來就是如何在 Android 項目中使用了。參見官方說明

首先使 Application 繼承 DaggerApplication,Activity 繼承 DaggerAppCompatActivity,Fragment 繼承 DaggerFragment。

新建一個接口使用 @Subcomponent 注解繼承 AndroidInjector<YourActivity>,內部抽象類使用 @Subcomponent.Builder 注解繼承AndroidInjector.Builder<YourActivity>。

 @Subcomponent(modules = arrayOf(...)) // 沒有其他 Module 圓括號可省略 interface YourActivitySub : AndroidInjector<YourActivity> {   @Subcomponent.Builder   abstract class Builder : AndroidInjector.Builder<YourActivity>() }

新建一個抽象類使用 @Module 注解,用于出入 Activity。

 @Module(subcomponents = arrayOf( YourActivitySub::class)) // 每新建一個 Activity,都要新建相應的 ActivitySub 接口,并添加到這里 abstract class ActivityModule {   @Binds // 每新建一個 Activity,都要添加一個相應方法,方法名不能相同   @IntoMap   @ActivityKey(YourActivity::class)   abstract fun bindYourActivity(builder: YourActivitySub.Builder): AndroidInjector.Factory<out Activity>  } 

新建接口 YouApplicationSub 使用 @Component 注解,繼承 AndroidInjector<YourApplication>,內部抽象類使用 @Component.Builder 注解繼承 AndroidInjector.Builder<YourApplicaton>。

 @Singleton // 如果有 Module 使用了該注解實現單例模式,這里也需要添加 @Component(modules = arrayOf(   ActivityModule::class, // 注入 Activity 的 Module   FragmentModule::class, // 注入 Fragment 的 Module   ...   AndroidSupportInjectionModule::class)) // 確保 DaggerApplication、DaggerActivity、DaggerFragment等所有類型可用 interface ApplicationSub : AndroidInjector<MyApplication> {   @Component.Builder   abstract class Builder : AndroidInjector.Builder<MyApplication>() }

使你的 Applicatoin 類繼承 DaggerApplication。

 class MyApplication : DaggerApplication() { // 如果項目中使用了 v4.Fragment 要繼承 support 包下的 DaggerApplication   override fun applicationInjector() : AndroidInjector<out DaggerApplication> {     return DaggerApplicationSub.builder().create(this) // 編譯后生成   } }

優化

這樣使用是不是很麻煩?在 Dagger2 2.11 版本之前,項目中每添加一個 Activity 或 Fragment 等組件,都要新建一個對應 Subcomponent 接口,并添加到對應的 Module 中,并且添加相應的方法。這樣使用起來太復雜了。

好在 google 也同樣的意識到了這個問題,所以在 Dagger2 2.11 版本及其以后,Dagger2 又為我們提供了一個 @ContributesAndroidInjector 注解,大大的簡化了使用。

首先,使用這個注解,你需要添加上 Dagger2 注解處理的 Android 支持:

 dependencies {   ...   implementation 'com.google.dagger:dagger:2.12' // Dagger 2 支持    implementation 'com.google.dagger:dagger-android-support:2.12' // Dagger 2 Android 支持   kapt 'com.google.dagger:dagger-compiler:2.12' // Dagger 2 注解處理   kapt 'com.google.dagger:dagger-android-processor:2.12' // Dagger 2 注解處理 Android 支持   ... }

然后,在注入 Activity 的 Module 中改變:

 @Module // 不需要再為每個 Activity 新建對應的 Subcomponent,不必再添加到這里 abstract class ActivityModule {   @ContributesAndroidInjector   abstract fun contributeYourActivity() : YourActivity }

就這樣,是不是簡潔了很多?之后每添加一個 Activity,只需要在 Activity 添加一個對應的方法就可以了。

@ContributesAndroidInjector 注解自動生成對應的 Subcomponent 而不需要我們手動添加。

語法解析

Dagger 2 的配置使用說完了,但是相信很多人對上面的一些語法都不了解,這里來簡單說明:

 // Kotlin 提供的方法,能簡單快速的生成一個數組 val array = arrayOf("1", "2") // 與之類似的還有 arrayListOf() 、 setOf() 等,以后詳細說明  // 類對象 A::class // 相當于 Java 中的 A.class,同時還有 A.javaClass 相當于 Java 中的 A.getClass()

最后

今天的 Kotlin Dagger2 使用就講到這里,接下來我還會為大家帶來更多的 Kotlin 相關語法知識以及基類封裝等。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产日本高清在线| 在线观看日韩www视频免费| 国产精品一区二区三区久久久| 亚洲人成电影在线| 久久久久久com| 国产一区二区视频在线观看| 日韩三级成人av网| 国产精品福利片| 91精品免费久久久久久久久| 一区二区中文字幕| 亚洲国产精品久久精品怡红院| 国产精品自拍网| 91精品啪在线观看麻豆免费| 国产精品大陆在线观看| 国产欧美欧洲在线观看| 亚洲人成在线观| 奇门遁甲1982国语版免费观看高清| 高清欧美性猛交xxxx| 国产日韩在线观看av| 欧美巨大黑人极品精男| 中文字幕综合一区| 韩国三级日本三级少妇99| 久久99精品久久久久久青青91| 亚洲人成在线观| 亚洲国产一区二区三区在线观看| 国产香蕉97碰碰久久人人| 国产91精品在线播放| 中文在线不卡视频| 国产精品女主播视频| 国产日韩欧美黄色| 国产精品成av人在线视午夜片| 91久久中文字幕| 亚洲欧美999| 亚洲国产99精品国自产| 国产精品xxxxx| 91干在线观看| 欧美黄色三级网站| 日本人成精品视频在线| 成人性教育视频在线观看| 久99九色视频在线观看| 欧美理论电影在线播放| 日本亚洲欧美成人| 欧美人在线观看| 亚洲娇小xxxx欧美娇小| 色www亚洲国产张柏芝| 最近2019中文免费高清视频观看www99| 欧美一级黄色网| 午夜精品久久久久久久99热浪潮| 欧美夫妻性生活视频| 亚洲xxxxx电影| 欧美日韩成人在线视频| 亚洲欧美国产日韩中文字幕| 精品亚洲男同gayvideo网站| 亚洲xxxxx性| 国产日韩在线看片| 久久精品人人爽| 亚洲国产欧美一区二区三区同亚洲| 亚洲一区二区免费在线| www.久久草.com| 精品中文视频在线| 欧美激情精品久久久久久变态| 日韩精品亚洲元码| 国产欧美一区二区白浆黑人| 亚洲福利小视频| 欧美疯狂xxxx大交乱88av| 欧美性受xxx| 欧美另类极品videosbestfree| 亚洲欧美自拍一区| 成人激情视频在线观看| 欧美另类精品xxxx孕妇| 欧美精品久久久久久久| www.日韩系列| 日韩欧美一区二区三区久久| 亚洲大胆人体av| 亚洲人永久免费| 美女视频久久黄| 国产精自产拍久久久久久蜜| 亚洲成人1234| 精品成人久久av| 亚洲网址你懂得| 成人欧美一区二区三区黑人| 欧美日韩久久久久| 国产精自产拍久久久久久| 超碰97人人做人人爱少妇| 欧美精品在线视频观看| 成人国产精品久久久| 成人深夜直播免费观看| 国产精品678| 91精品国产91久久久久久不卡| 超碰91人人草人人干| 欧美与黑人午夜性猛交久久久| 91精品视频在线看| 欧美精品激情视频| 国产免费一区二区三区在线观看| 色综合影院在线| 日韩av在线免费观看一区| 色偷偷亚洲男人天堂| 日韩在线观看免费全集电视剧网站| 久久人人爽人人爽人人片av高请| 91精品国产乱码久久久久久蜜臀| 国产精品第七十二页| 色噜噜狠狠色综合网图区| 亚洲视频欧美视频| 中文字幕9999| 日韩视频免费中文字幕| 亚洲精品综合久久中文字幕| 日韩av免费网站| 成人中心免费视频| 欧美成人四级hd版| 欧美精品性视频| 久久成人亚洲精品| 欧美在线视频观看免费网站| 国产精品亚洲欧美导航| 国产精品一区二区三区成人| 欧美在线视频观看免费网站| 国产综合福利在线| 永久免费毛片在线播放不卡| 久久久亚洲网站| 蜜月aⅴ免费一区二区三区| 亚洲精品国产成人| 亚洲一区二区三区成人在线视频精品| 热草久综合在线| 欧美大秀在线观看| 国产在线不卡精品| 久热在线中文字幕色999舞| 国产亚洲精品一区二区| 欧美亚洲成人免费| 国产精品av在线播放| 欧美精品xxx| 成人精品视频久久久久| 日韩av色综合| 欧美日韩高清区| 欧美午夜精品伦理| 日韩av综合网站| 成人国产亚洲精品a区天堂华泰| 亚洲伊人久久大香线蕉av| 国产99久久久欧美黑人| 国产午夜精品全部视频播放| 九九热精品视频| 欧美中文在线视频| 日韩a**站在线观看| 国产精品一区二区久久国产| 日韩免费中文字幕| 精品国产乱码久久久久久虫虫漫画| 欧美俄罗斯性视频| 国产日韩av在线播放| 在线观看日韩视频| 国内精品一区二区三区四区| 国产专区精品视频| 日韩中文字幕欧美| 亚洲成人精品久久| 欧美一级电影免费在线观看| 久久精品视频播放| 97视频网站入口| 日韩av在线免费观看一区| 日韩av在线免费看| 91免费高清视频| 日本国产一区二区三区| 亚洲国产欧美一区二区三区久久| 国内精品美女av在线播放| 日韩成人激情在线| 91精品国产一区| 久久久久久久成人| 日韩麻豆第一页|