到目前為止我們使用Dagger創(chuàng)建的對(duì)象都Application級(jí)別莺奸,即和整個(gè)應(yīng)用的生命周期相同的算柳。那還有很多情況是我們需要?jiǎng)?chuàng)建的對(duì)象是和Activity或者Fragement生命周期綁定的爬范。最好的做法是不同生命周期的對(duì)象應(yīng)該有不同的Component雳攘,這樣會(huì)避免很多麻煩茴恰。
還記得最初要做的那個(gè)例子嗎巴粪?就是在ListView中展示Feed流信息。這樣我們就需要一個(gè)Adapter來(lái)填充ListView民宿。是不是下意識(shí)的在Activity中new一個(gè)Adapter 娇妓?既然是new一個(gè)話是不是相當(dāng)于形成了依賴關(guān)系?那么為什么不用Dagger呢勘高!編寫(xiě)一個(gè)HomeActivityComponent:
同時(shí)也要添加對(duì)應(yīng)的Module提供所需的依賴峡蟋。每次寫(xiě)完都需要build坟桅,這樣Dagger才能幫我們生成代碼华望。
這里面遇到一個(gè)問(wèn)題,就是初始化AdapterRepos時(shí)需要Picasso對(duì)象仅乓。而Picasso在GithubApplicationComponent里提供赖舟。這時(shí)就需要告訴Dagger使用GithubApplicationComponent里提供的Picasso。代碼如下:
不難看出夸楣,除了在HomeActivityModule提供依賴外宾抓,也在告訴Dagger如果在HomeActivityModule里找不到依賴的時(shí)候可以到GitHubApplicationComponent中找一找。(注意紅色方框中的代碼豫喧,
modules = HomeActivityModule.class, dependencies = GithubApplicationComponent.class
)那么在初始化這個(gè)Component的時(shí)候就需要做一些特殊的處理石洗,把從Application中獲取的component傳到HomeActivityComponent中。代碼如下:
事實(shí)上我們還可以在HomeActivityComponent添加
Picasso getPicasso();
和GithubService getGithubService();
兩個(gè)方法紧显,這樣我們就不必在Application中提供這兩個(gè)類讲衫,Application中的代碼進(jìn)一步簡(jiǎn)化。這其實(shí)就是Dagger使用的精華所在孵班。這篇文章其實(shí)也是想講Component之間的配合涉兽,希望可以從中學(xué)會(huì)如何使用招驴。下篇文章將要講@Inject的使用。
相關(guān)文章:
從實(shí)例出發(fā)理解Dagger2(一)
從實(shí)例出發(fā)理解Dagger2(二)
從實(shí)例出發(fā)理解Dagger2(三)
從實(shí)例出發(fā)理解Dagger2(四)
從實(shí)例出發(fā)理解Dagger2(五)
從實(shí)例出發(fā)理解Dagger2(六)
從實(shí)例出發(fā)理解Dagger2(七)
參考資料:https://www.youtube.com/watch?v=-Xk1LNrjarw&list=PLuR1PJnGR-Ih-HXnGSpnqjdhdvqcwhfFU&index=6