模塊化解耦框架RxFluxArchitecture4-依賴庫與依賴注入

相關(guān)系列文章

模塊化解耦框架RxFluxArchitecture1-框架簡介

模塊化解耦框架RxFluxArchitecture2-基本功能實現(xiàn)

模塊化解耦框架RxFluxArchitecture3-訂閱管理綁定生命周期

模塊化解耦框架RxFluxArchitecture4-依賴庫與依賴注入

模塊化解耦框架RxFluxArchitecture5-Application多模塊共存

框架中使用 Dagger.Android 實現(xiàn)依賴注入功能债蜜。

框架圖

框架圖.jpg

核心庫

1碑幅、注解庫core-arch-annotations

core-arch-annotations是注解庫酝蜒,配合注解編譯庫core-arch-processor使用突勇,實現(xiàn) Application 多模塊共存津滞。

2茅特、數(shù)據(jù)總線庫core-eventbus

core-eventbusEventBus 基礎(chǔ)上添加 Tag 功能馍惹,配合注解編譯庫core-eventbus-processor使用燎猛,提高效率曹抬。

3溉瓶、框架核心庫core-arch

3.1为牍、核心接口

  • RxSubscriberView 實現(xiàn)該接口的 View哼绑,RxFlux根據(jù)其生命周期自動注冊訂閱、取消訂閱吵聪,接收core-eventbus發(fā)送的通知凌那。
  • RxFluxView<T extends ViewModel> 實現(xiàn)該接口的 View,可獲取對應的 Store 并關(guān)聯(lián) View 的生命周期吟逝。
  • RxAppLifecycle Application 生命周期代理接口帽蝶。

3.2、核心類

  • RxApp繼承DaggerApplication,為使用@ContributesAndroidInjector注解的 Activity 自動生成依賴注入器励稳。使用反射獲取編譯生成類RxAppLifecycleImpl佃乘,實現(xiàn) Application 多模塊共存。
  • RxFlux管理 View 生命周期驹尼,關(guān)聯(lián) View 與 Store趣避,使用@Inject標注構(gòu)造方法注入。
  • RxDispatcher使用core-eventbus對 View 和 Store 注冊訂閱新翎、發(fā)送通知程帕、取消訂閱,使用@Inject標注構(gòu)造方法注入地啰。
  • RxActionManager管理RxActionio.reactivex.disposables.Disposable對應關(guān)系愁拭,使用@Inject標注構(gòu)造方法注入。
  • RxStoreFactory實現(xiàn)ViewModelProvider.Factory亏吝,為 View 提供 Store岭埠,使用@Inject標注構(gòu)造方法注入。
  • RxActionCreator所有 ActionCreator 的父類蔚鸥,封裝RxDispatcherRxActionManager惜论,為子類提供公共方法。
  • RxFluxModule全局依賴注入倉庫止喷,提供ViewModelProvider.Factory的實現(xiàn)類RxStoreFactory實例對象馆类,提供Context的子類Application實例對象。

3.3启盛、核心View

  • RxFluxActivity<T>蹦掐、RxFluxFragment<T>RxFluxDialog<T>實現(xiàn)RxFluxView<T>僵闯、RxSubscriberView接口方法卧抗,是所有 View 的父類。
  • RxFluxActivity<T>實現(xiàn)dagger.android.supportHasSupportFragmentInjector接口鳖粟,為使用@ContributesAndroidInjector注解的 Fragment 自動生成依賴注入器社裆。

通用庫

core-common封裝自定義父類和自定義常用工具方法,添加通用依賴向图,使用時可按自己編程習慣重新編寫泳秀。

1摄悯、包base

  • BaseApp繼承RxApp,全局使用的Application,初始化全局使用的方法工具庆杜。
  • BaseView自定義 View 接口射众。
  • BaseActivity<T>實現(xiàn)BaseView碟摆,繼承RxFluxActivity<T>晃财,使用ButterKnife,自定義全局響應RxLoading典蜕、RxError断盛、RxRetry
  • BaseFragment<T>實現(xiàn)BaseView愉舔,繼承RxFluxFragment<T>钢猛,使用ButterKnife,自定義ToolBar轩缤、Menu命迈。
  • BaseDialog<T>實現(xiàn)BaseView,繼承RxFluxDialog<T>火的,使用ButterKnife壶愤。

2、包common

  • CommonActionCreator可全局使用的 ActionCreator馏鹤,使用@Inject標注構(gòu)造方法注入征椒。
  • CommonLoadingDialog可全局使用的進度彈框,使用@Inject標注構(gòu)造方法注入湃累。
  • CommonHttpInterceptor可全局使用的OkHttp攔截器勃救,使用@Inject標注構(gòu)造方法注入。
  • CommonException自定義異常治力。
  • CommonModule通用全局依賴注入倉庫蒙秒,依賴RxFluxModule
  • CommonUtils常用自定義工具宵统。
  • CommonLoadMoreView自定義BaseRecyclerViewAdapterHelper加載樣式晕讲。

功能庫

1、圖片解析庫core-image

core-image封裝Glide,解析圖片益兄。

2锻梳、常用工具庫core-utils

  • ActivityUtils自定義 Activity 中常用方法。
  • LocalStorageUtils封裝Fastjson的工具類净捅,使用@Inject標注構(gòu)造方法注入疑枯。

3、下載進度提醒庫core-progress

core-progress使用OkHttp蛔六、Retrofit荆永,依賴核心庫core-arch,完成下載進度提醒国章,使用@Inject標注構(gòu)造方法注入具钥。

4、緩存Cookie庫core-cookie

core-cookie接口認證使用 Cookie 緩存液兽,使用@Inject標注構(gòu)造方法注入骂删。

殼模塊

殼模塊module-appSimpleApplication繼承BaseApp,使用依賴注入器SimpleComponent四啰,實現(xiàn)依賴注入宁玫。

@RxAppBody
public class SimpleApplication extends BaseApp {
    @Override
    protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
        return DaggerSimpleComponent.builder().application(this).build();
    }
}

SimpleComponent中添加業(yè)務模塊依賴注入倉庫、通用全局依賴注入倉庫CommonModule柑晒、Dagger.Android支持倉庫AndroidSupportInjectionModule欧瘪。

@Singleton
@Component(modules = {
        GanAppModule.class,
        WanAppModule.class,
        com.huyingbao.module.wan.kotlin.module.WanAppModule.class,
        CommonModule.class,
        AndroidSupportInjectionModule.class})
public interface SimpleComponent extends AndroidInjector<SimpleApplication> {
    @Component.Builder
    interface Builder {
        @BindsInstance
        SimpleComponent.Builder application(Application application);

        SimpleComponent build();
    }
}

業(yè)務模塊

業(yè)務模塊module-wan依賴注入倉庫WanAppModule,包含WanInjectActivityModuleWanStoreModule匙赞。

  • WanInjectActivityModule通過注解@ContributesAndroidInjector佛掖,自動生成 Activity 的依賴注入器。
  • WanStoreModule提供 Store 對象 組成的Map<Class<? extends ViewModel>, Provider<ViewModel>>涌庭,作為RxStoreFactory的構(gòu)造方法入?yún)⒔姹唬琒tore 使用@Inject標注構(gòu)造方法注入。

每個 Activity 的注入器中添加WanInjectFragmentModule脾猛,WanInjectFragmentModule通過注解@ContributesAndroidInjector撕彤,自動生成 Fragment 的依賴注入器。

@Module
public abstract class WanInjectActivityModule {
    @ActivityScope
    @ContributesAndroidInjector(modules = WanInjectFragmentModule.class)
    abstract ArticleActivity injectArticleActivity();

    @ActivityScope
    @ContributesAndroidInjector(modules = WanInjectFragmentModule.class)
    abstract LoginActivity injectLoginActivity();
}

依賴注入

依賴注入-全局.jpg

1猛拴、Activity 與 Fragment 依賴注入器自動生成

依賴注入-Activity與Fragment.jpg

2羹铅、Store 依賴注入實現(xiàn)

依賴注入-Store.jpg

源碼

開源模塊化解耦框架RxFluxArchitecture,歡迎大家點贊Fork愉昆,更歡迎點評指導职员。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跛溉,隨后出現(xiàn)的幾起案子焊切,更是在濱河造成了極大的恐慌扮授,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件专肪,死亡現(xiàn)場離奇詭異刹勃,居然都是意外死亡,警方通過查閱死者的電腦和手機嚎尤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門荔仁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芽死,你說我怎么就攤上這事乏梁。” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捕传。 經(jīng)常有香客問我,道長军俊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上模暗,老公的妹妹穿的比我還像新娘。我一直安慰自己念祭,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布碍侦。 她就那樣靜靜地躺著粱坤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓷产。 梳的紋絲不亂的頭發(fā)上站玄,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音濒旦,去河邊找鬼株旷。 笑死,一個胖子當著我的面吹牛尔邓,可吹牛的內(nèi)容都是我干的晾剖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼梯嗽,長吁一口氣:“原來是場噩夢啊……” “哼齿尽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灯节,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤循头,失蹤者是張志新(化名)和其女友劉穎绵估,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卡骂,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡国裳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了全跨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躏救。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖螟蒸,靈堂內(nèi)的尸體忽然破棺而出盒使,到底是詐尸還是另有隱情,我是刑警寧澤七嫌,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布少办,位于F島的核電站,受9級特大地震影響诵原,放射性物質(zhì)發(fā)生泄漏英妓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一绍赛、第九天 我趴在偏房一處隱蔽的房頂上張望蔓纠。 院中可真熱鬧,春花似錦吗蚌、人聲如沸腿倚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敷燎。三九已至,卻和暖如春箩言,著一層夾襖步出監(jiān)牢的瞬間硬贯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工陨收, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饭豹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓务漩,卻偏偏與公主長得像拄衰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菲饼,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353