真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Dagger2如何使用

這篇文章主要介紹了Dagger2如何使用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),臨夏州企業(yè)網(wǎng)站建設(shè),臨夏州品牌網(wǎng)站建設(shè),網(wǎng)站定制,臨夏州網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,臨夏州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

什么是Dagger2

Dagger2是Dagger的升級版,是Android目前最好用的依賴注入框架,在編譯期間自動(dòng)生成代碼,負(fù)責(zé)依賴對象的創(chuàng)建。第一代由Square公司共享出來,第二代則是由谷歌接手后推出的。

為什么我要使用Dagger2

我們使用Dagger2的主要目的是降低類與類之間的耦合度,舉個(gè)例子。

Dagger2如何使用

這里有一個(gè)Person類,我們在這個(gè)類里面,想使用RichPerson類中的方法,那么我們就需要在Person類中拿到RichPerson的實(shí)例,也就是說Person和RichPerson耦合到一起了,違背了單一職責(zé)。如果還有很多類都要使用RichPerson類中的方法,那么就會有很多類跟RichPerson這個(gè)類耦合起來,一旦RichPerson構(gòu)造方法變了,比如需要傳入一個(gè)id才能使用,那么所有使用RichPerson的類都需要改,這個(gè)工作量可不小,而且這樣也違背了開閉原則。
這個(gè)時(shí)候如果我們使用Dagger2,我們就可以在Person類中通過@Inject的方式拿到RichPerson實(shí)例而不需要在Person中去new RichPerson

Dagger2如何使用

使用(基于Kotlin)

在項(xiàng)目的build.gradle中,添加

apply plugin: 'kotlin-kapt'
dependencies {
 kapt 'com.google.dagger:dagger-compiler:2.14.1' 
 implementation 'com.google.dagger:dagger:2.14.1'
}

這里我們就以MVP模式為例

1.傳統(tǒng)MVP

在View層我們想要去獲取數(shù)據(jù),那么我們就要去通過構(gòu)造拿到P層對象

Dagger2如何使用

這邊gif我就不演示了,單純的吐司提示而已,這種傳統(tǒng)的MVP會在View層去實(shí)例化Persenter

2.Dagger2方式MVP

那么用Dagger2的方式,我們應(yīng)該怎么在V層拿到P層的引用呢?

1.我們需要在P層的構(gòu)造方法中添加一個(gè)@Inject注解,告訴Dagger2,我是可以通過注解拿到的

Dagger2如何使用

2.給你任何需要用@Inject注解拿對象的類創(chuàng)建一個(gè)Component類,這一步其實(shí)就是相當(dāng)于告訴Dagger2,我這個(gè)類需要用到@Inject拿對象哦

Dagger2如何使用

3.Build——>Make Project,Dagger2會自動(dòng)生成Dagger+***Component,比如

Dagger2如何使用

4.在V層中通過@Inject和Component拿到實(shí)例對象

Dagger2如何使用

到此,Dagger2基本使用完畢,我們可以通過@Inject拿到我們想要的任何對象(這個(gè)對象的構(gòu)造方法前面需要添加@Inject),并且不需要new

V層拿P層,P層拿V層

上面的方式,我們可以在V層拿到P層的引用并且去調(diào)用P層的方法,那么如果我們需要在P層中拿到V層的對象,該怎么辦呢?給P層也定義一個(gè)Component?不是的,這里,我們需要用到一個(gè)新的知識點(diǎn),Module

那么,什么是Module呢,我個(gè)人的理解,就是把我本身提供出去,給其他類使用

1.在P層的構(gòu)造中添加@Inject注解并添加V層的參數(shù)

Dagger2如何使用

2.給V層定義一個(gè)對應(yīng)的Module,把自己提供出去

Dagger2如何使用

3.創(chuàng)建V層對應(yīng)的Component,與上面不同的事,我們這里需要定義一個(gè)Module

Dagger2如何使用

4.Build——>Make Project,自動(dòng)生成Dagger+***Component

5.調(diào)用

Dagger2如何使用

可能到這里你還是懵的,怎么調(diào)用一下這些方法,就把自己傳過去了呢?莫慌,接下來帶你去Dagger2生成的代碼中去看看。

DaggerMainActivityComponent.builder()返回了一個(gè)Builder

Dagger2如何使用

builder是空構(gòu)造,那么我們繼續(xù)往下看

Dagger2如何使用

.mainActivityModule(MainActivityModule(this))把自己傳進(jìn)去,這里
做了一個(gè)非空判斷之后給成員變量賦值,然后返回Builder本身

Dagger2如何使用

  .build()如果上面?zhèn)魅氲闹凳莕ull,拋異常,否則調(diào)用Comopent構(gòu)造并傳入builder

Dagger2如何使用

Dagger2如何使用

把Builder中的module賦值給Component中的module

Dagger2如何使用

 .inject(this)傳入自身(這里的this就是activity本身)

Dagger2如何使用

調(diào)用injectMainPresenter方法,后面的getMainPresenter拿到presenter對象,然后給activity中@Inject注解的presenter賦值

Dagger2如何使用

new Presenter的時(shí)候傳入了activity,完成賦值

Dagger2如何使用

Dagger2如何使用

至此我們的對象實(shí)例化完成。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Dagger2如何使用”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!


新聞標(biāo)題:Dagger2如何使用
網(wǎng)站路徑:http://weahome.cn/article/jdigsd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部