zoukankan      html  css  js  c++  java
  • Dagger2

     持续更新中、、、

    第二次更新:   2018-3-22 10:50

    在Activity中通过获取Activity的容器来注入Activity,达到Activity和容器相连

    这里面ActivityComponent依赖AppComponent,那么只需要在AppComponent配置各种东西就行了 

    大体上只需要提供这五个就行了,这里的AppModule和HttpModule都是为了这五个东西而准备的

    可以看到,AppModule需要RetrofitHelper, RealmHelper, ImplPreferencesHelper这几个,其他的都好说,不需要依赖其他类,但是RetrofitHelper需要

    需要ZhihuApis, GankApis等,这一系列需要Okhttp+Retrofit配合才能生成,所以回到AppComponent,还有一个HttpModule,感觉Module之间可以相互引用,应该是容器自己获取到了所有资源,自动去处理这些事情的,不清楚算法怎么写的,非常棒棒的, 然后的话就是Spring和Structs2里面可以通过接口来注入,这里貌似在AppModule通过一个方法来返回的,不能通过识别子类注入父类的做法。 

    在这里,使用Scope + Qualifier 限定使用范围,构建Okhttp和Retrofit, okhttp设置超时,缓存,dns,代理  and so on  
     
    大体上,网络的核心架构已经完了。

    第一次更新:  2018-03-20 14:36 

    呃,看了俩天的时间,懵懵懂懂,大致了解了这个东西的用处,依赖注解在以前玩Spring+Mybatis+Structs2的时候也了解过,ButterKnife也有过一些宏观上的理解,这个东西目前没有去了解源码,先大致有个了解,总的来说,使用Component充当容器,里面放类的实例,如果是第三方的类,用Module收集起来,统一处理,自己编写的可以用Inject来处理,至于Scope,Qualifier,Singleton,SubComponent只是对Dagger2的补充。   优点是结构清晰,日后改起来舒服,不需要new,测试方便,大工程用起来效果明显。

    Inject Component Module Provides  
    Inject是注入点  
    Component是容器  用来初始化所有需要注入的东西
    Module是特殊的容器  放那些第三方库类 不能注入的  配合Provides一起使用
    作为补充的Scope, Qualifier, Singleton, SubComponent等都是对dagger2的补充 
     
    创建类有俩个维度,第一个是Inject,第二个是Module,优先使用Module里面的
    如果在Component有俩个Inject都是A,那么会出现依赖注入迷失,这时候需要用到Qualifier 限定符
     
    Component以页面为粒度进行划分,需要一个全局ApplicationComponent,每个页面对应一个Component
     
    Singleton用来管理Component和Module的关系,保证是匹配的,可读性,Module创建的类是单例
     
    类实例共享 组织Component,其他的Component想把全局的类实例注入到目标类怎么弄?  
    依赖方式: 一个Component是依赖一个或多个Component,dependencies属性就是依赖方式的实现
    包含方式: 一个Component是包含一个或多个Component,SubComponent是具体的实现
     
    Scope  用来组织Component,编译期间会报错, 若Component的自定义Scope和Modules中的标注创建类实例方法的注解不一致,会报错

    优点: 不需要new, 单例线程安全,不论懒汉模式还是饿汉模式, app的全局Component管理各个页面的Component,结构非常清晰,方便测试。

    项目学习地址: https://github.com/codeestX/GeekNews

    扩展阅读: http://android.jobbole.com/82694/

    后续思考:  dagger固然是好,但是忘记了google目前把kotlin作为开发标准,那么问题来了,是kotlin还是java,既然有React Native的趋势,那么Kotlin也不可避免的失败,可以接着学。  kotlin放弃。


    待持续更新:  2018-3-20 14:35:51

  • 相关阅读:
    List of Examples Converting XNA 3.1 to XNA 4.0
    XNA程序开发常用到的一些代码汇总
    在WCF中使用Flag Enumerations
    能飞过海洋的却只有海鸥【转载】
    Variant类型转换成CString代码
    一种漂亮的自绘菜单
    转 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
    COM组件设计与应用之VC6中用ATL写组件
    vc的菜单,工具栏
    (餐饮)写一些开店的经验转
  • 原文地址:https://www.cnblogs.com/zeroones/p/8609150.html
Copyright © 2011-2022 走看看