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

相關係列文章react

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

模塊化解耦框架RxFluxArchitecture2-基本功能實現git

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

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

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

框架中使用 Dagger.Android 實現依賴注入功能。緩存

框架圖

框架圖.jpg

核心庫

一、註解庫core-arch-annotations

core-arch-annotations是註解庫,配合註解編譯庫core-arch-processor使用,實現 Application 多模塊共存。bash

二、數據總線庫core-eventbus

core-eventbusEventBus 基礎上添加 Tag 功能,配合註解編譯庫core-eventbus-processor使用,提升效率。cookie

三、框架核心庫core-arch

3.一、核心接口

  • RxSubscriberView 實現該接口的 View,RxFlux根據其生命週期自動註冊訂閱、取消訂閱,接收core-eventbus發送的通知。
  • RxFluxView<T extends ViewModel> 實現該接口的 View,可獲取對應的 Store 並關聯 View 的生命週期。
  • RxAppLifecycle Application 生命週期代理接口。

3.二、核心類

  • RxApp繼承DaggerApplication,爲使用@ContributesAndroidInjector註解的 Activity 自動生成依賴注入器。使用反射獲取編譯生成類RxAppLifecycleImpl,實現 Application 多模塊共存。
  • RxFlux管理 View 生命週期,關聯 View 與 Store,使用@Inject標註構造方法注入。
  • RxDispatcher使用core-eventbus對 View 和 Store 註冊訂閱、發送通知、取消訂閱,使用@Inject標註構造方法注入。
  • RxActionManager管理RxActionio.reactivex.disposables.Disposable對應關係,使用@Inject標註構造方法注入。
  • RxStoreFactory實現ViewModelProvider.Factory,爲 View 提供 Store,使用@Inject標註構造方法注入。
  • RxActionCreator全部 ActionCreator 的父類,封裝RxDispatcherRxActionManager,爲子類提供公共方法。
  • RxFluxModule全局依賴注入倉庫,提供ViewModelProvider.Factory的實現類RxStoreFactory實例對象,提供Context的子類Application實例對象。

3.三、核心View

  • RxFluxActivity<T>RxFluxFragment<T>RxFluxDialog<T>實現RxFluxView<T>RxSubscriberView接口方法,是全部 View 的父類。
  • RxFluxActivity<T>實現dagger.android.supportHasSupportFragmentInjector接口,爲使用@ContributesAndroidInjector註解的 Fragment 自動生成依賴注入器。

通用庫

core-common封裝自定義父類和自定義經常使用工具方法,添加通用依賴,使用時可按本身編程習慣從新編寫。app

一、包base

  • BaseApp繼承RxApp,全局使用的Application,初始化全局使用的方法工具。
  • BaseView自定義 View 接口。
  • BaseActivity<T>實現BaseView,繼承RxFluxActivity<T>,使用ButterKnife,自定義全局響應RxLoadingRxErrorRxRetry
  • BaseFragment<T>實現BaseView,繼承RxFluxFragment<T>,使用ButterKnife,自定義ToolBarMenu
  • BaseDialog<T>實現BaseView,繼承RxFluxDialog<T>,使用ButterKnife

二、包common

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

功能庫

一、圖片解析庫core-image

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

二、經常使用工具庫core-utils

  • ActivityUtils自定義 Activity 中經常使用方法。
  • LocalStorageUtils封裝Fastjson的工具類,使用@Inject標註構造方法注入。

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

core-progress使用OkHttpRetrofit,依賴核心庫core-arch,完成下載進度提醒,使用@Inject標註構造方法注入。

四、緩存Cookie庫core-cookie

core-cookie接口認證使用 Cookie 緩存,使用@Inject標註構造方法注入。

殼模塊

殼模塊module-appSimpleApplication繼承BaseApp,使用依賴注入器SimpleComponent,實現依賴注入。

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

SimpleComponent中添加業務模塊依賴注入倉庫、通用全局依賴注入倉庫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();
    }
}
複製代碼

業務模塊

業務模塊module-wan依賴注入倉庫WanAppModule,包含WanInjectActivityModuleWanStoreModule

  • WanInjectActivityModule經過註解@ContributesAndroidInjector,自動生成 Activity 的依賴注入器。
  • WanStoreModule提供 Store 對象 組成的Map<Class<? extends ViewModel>, Provider<ViewModel>>,做爲RxStoreFactory的構造方法入參,Store 使用@Inject標註構造方法注入。

每一個 Activity 的注入器中添加WanInjectFragmentModuleWanInjectFragmentModule經過註解@ContributesAndroidInjector,自動生成 Fragment 的依賴注入器。

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

    @ActivityScope
    @ContributesAndroidInjector(modules = WanInjectFragmentModule.class)
    abstract LoginActivity injectLoginActivity();
}
複製代碼

依賴注入

依賴注入-全局.jpg

一、Activity 與 Fragment 依賴注入器自動生成

依賴注入-Activity與Fragment.jpg

二、Store 依賴注入實現

依賴注入-Store.jpg

源碼

開源模塊化解耦框架RxFluxArchitecture,歡迎你們點贊Fork,更歡迎點評指導。

相關文章
相關標籤/搜索