Dagger2理解與記錄

對注入類和被注入類的解耦合,給被注入類生成一個對象。

A.首先從簡單的入手,被注入類無參:

創(chuàng)建一個activity,有一個類是Fragment1的屬性fragment1,對這個屬性@Inject
在類Fragment1中,創(chuàng)建一個實例方法,用于構(gòu)建實例對象,對這個方法@Inject
創(chuàng)建一個組分接口類,里面有一個接口說明對誰的屬性進行的@Inject:MainActivity

在MainActivity中啟動:DaggerF1Component.create().inject(this);

一共生成了3個類:

首先是DaggerF1Component,就像是一個組裝器一樣,它是入口。

initialize初始化了fragment1Provider和mainActivityMembersInjector,分別代表著Fragment1和MainActivity
Fragment1_Factory就是用來生成Fragment1對象的
MainActivity_MembersInjector接收了fragment1Provider,并實現(xiàn)了F1Component接口讓MainActivity綁上fragment1對象

B.被注入類有參:

會麻煩不少,畢竟無參的時候用和不用Dagger2也看不出什么差別,反而繁瑣了??吹降暮芏郉agger2的作用都是解耦并且讓入?yún)⒆儎訉σ蕾囶悷o甚影響,其實我還不明白為什么。大多以MVP舉例,我就不用MVP了。

我現(xiàn)在要MainActivity傳一個TextView給Fragment1,把這個TextView展示在界面上。

添加了一個傳遞的參數(shù)testView,啟動方法也改了,將模塊添加了進去
component綁定了模塊
更改了Fragment1的實例方法,接收入?yún)extView,將其展示切片在右下角
添加了一個模塊類ModuleForTextView,也是接收了傳參,并把這個參數(shù)通過providexxx的方法作為返回值返回了

在MainActivity中啟動:DaggerF1Component.builder().moduleForTextView(new ModuleForTextView(textView)).build().inject(this);

一共生成了4個類,其中MainActivity_MembersInjector無變動:

主要變動了構(gòu)造,因為Builder里面接收了Module的實例,把實例給了ModuleForTextView_ProvideTextViewFactory生成了provideTextViewProvider;然后把provideTextViewProvider又給了Fragment1,就是模塊入?yún)⒕偷扔谑荈ragment1入?yún)⒘?/div>
就在這把模塊的入?yún)⒔o了Fragment1
ModuleForTextView_ProvideTextViewFactory拿了模塊入?yún)?chuàng)建了對象,get返回了入?yún)⒌膖extView

這時候我Fragment1又要加一個入?yún)⒘?,這時候可以加一個模塊,加一個Button試一下。

添加了一個module,啟動時加上
綁定也加上
Fragment1的實例方法加了一個button
Component的變動
最終效果

理解:

1.Component負(fù)責(zé)組裝、啟動,通過被注入類的MembersInjector?injectMembers 注入屬性;

2.Module是被組裝的一個模塊,一個積木,最終形態(tài)要符合注入類的形態(tài),通過providexxx將東西給出去;

3.@Inject注釋的實例構(gòu)造方法決定了形態(tài)。

4.應(yīng)該用于某種組裝業(yè)務(wù)或者組裝邏輯場景。類似flutter的fish_redux。

注:如果一樣的類型區(qū)分不了那就得用@Qualifier,See.

Demo

學(xué)習(xí)參考:

Dagger 2 的基本使用與原理

Dagger2從入門到放棄再到恍然大悟

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容