模塊化解耦框架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,可獲取對應(yīng)的 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標(biāo)注構(gòu)造方法注入。
  • RxDispatcher使用core-eventbus對 View 和 Store 注冊訂閱、發(fā)送通知、取消訂閱,使用@Inject標(biāo)注構(gòu)造方法注入。
  • RxActionManager管理RxActionio.reactivex.disposables.Disposable對應(yīng)關(guān)系,使用@Inject標(biāo)注構(gòu)造方法注入。
  • RxStoreFactory實現(xiàn)ViewModelProvider.Factory,為 View 提供 Store,使用@Inject標(biāo)注構(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封裝自定義父類和自定義常用工具方法,添加通用依賴,使用時可按自己編程習(xí)慣重新編寫。

1、包base

  • BaseApp繼承RxApp,全局使用的Application,初始化全局使用的方法工具。
  • BaseView自定義 View 接口。
  • BaseActivity<T>實現(xiàn)BaseView,繼承RxFluxActivity<T>,使用ButterKnife,自定義全局響應(yīng)RxLoading、RxErrorRxRetry。
  • BaseFragment<T>實現(xiàn)BaseView,繼承RxFluxFragment<T>,使用ButterKnife,自定義ToolBar、Menu。
  • BaseDialog<T>實現(xiàn)BaseView,繼承RxFluxDialog<T>,使用ButterKnife。

2、包common

  • CommonActionCreator可全局使用的 ActionCreator,使用@Inject標(biāo)注構(gòu)造方法注入。
  • CommonLoadingDialog可全局使用的進度彈框,使用@Inject標(biāo)注構(gòu)造方法注入。
  • CommonHttpInterceptor可全局使用的OkHttp攔截器,使用@Inject標(biāo)注構(gòu)造方法注入。
  • CommonException自定義異常。
  • CommonModule通用全局依賴注入倉庫,依賴RxFluxModule。
  • CommonUtils常用自定義工具。
  • CommonLoadMoreView自定義BaseRecyclerViewAdapterHelper加載樣式。

功能庫

1、圖片解析庫core-image

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

2、常用工具庫core-utils

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

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

core-progress使用OkHttpRetrofit,依賴核心庫core-arch,完成下載進度提醒,使用@Inject標(biāo)注構(gòu)造方法注入。

4、緩存Cookie庫core-cookie

core-cookie接口認(rèn)證使用 Cookie 緩存,使用@Inject標(biāo)注構(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è)務(wù)模塊依賴注入倉庫、通用全局依賴注入倉庫CommonModuleDagger.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è)務(wù)模塊

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

  • WanInjectActivityModule通過注解@ContributesAndroidInjector,自動生成 Activity 的依賴注入器。
  • WanStoreModule提供 Store 對象 組成的Map<Class<? extends ViewModel>, Provider<ViewModel>>,作為RxStoreFactory的構(gòu)造方法入?yún)?,Store 使用@Inject標(biāo)注構(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,更歡迎點評指導(dǎo)。

最后編輯于
?著作權(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)容