對注入類和被注入類的解耦合,給被注入類生成一個對象。
A.首先從簡單的入手,被注入類無參:



在MainActivity中啟動:DaggerF1Component.create().inject(this);
一共生成了3個類:
首先是DaggerF1Component,就像是一個組裝器一樣,它是入口。



B.被注入類有參:
會麻煩不少,畢竟無參的時候用和不用Dagger2也看不出什么差別,反而繁瑣了??吹降暮芏郉agger2的作用都是解耦并且讓入?yún)⒆儎訉σ蕾囶悷o甚影響,其實我還不明白為什么。大多以MVP舉例,我就不用MVP了。
我現(xiàn)在要MainActivity傳一個TextView給Fragment1,把這個TextView展示在界面上。




在MainActivity中啟動:DaggerF1Component.builder().moduleForTextView(new ModuleForTextView(textView)).build().inject(this);
一共生成了4個類,其中MainActivity_MembersInjector無變動:



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





理解:
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.
學(xué)習(xí)參考:
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。