# Dagger2Sample **Repository Path**: 1017965668/Dagger2Sample ## Basic Information - **Project Name**: Dagger2Sample - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-08-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Dagger2Sample #### 介绍 {**以下是码云平台说明,您可以替换此简介** 码云是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 无论是个人、团队、或是企业,都能够用码云实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} #### Dagger2依赖注入流程 步骤1:查找Module中是否存在创建该类的方法。 步骤2:若存在创建类方法,查看该方法是否存在参数 步骤2.1:若存在参数,则按从步骤1开始依次初始化每个参数 步骤2.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束 步骤3:若不存在创建类方法,则查找@Inject注解的构造函数,看构造函数是否存在参数 步骤3.1:若存在参数,则从步骤1开始依次初始化每个参数 步骤3.2:若不存在参数,则直接初始化该类实例,一次依赖注入到此结束 from https://www.jianshu.com/p/e521bd239cd9 ### 简化版的Dagger实现依赖注入的几个必要条件 1.第三方库通过Modules的@provides注解来提供依赖(DishesModules.java) 2.提供一个全局唯一的Component,并且Modules中需要天际AndroidSupportInjectionModule类,它的作用时关联需求与依赖之间的关系(OrderAppComponent.java) 3.Application需要继承DaggerApplication类,并且在applicationInjector构建并返回全剧唯一的Component实例(OrderApp.java) 4.其它需要使用依赖注入的组建都需要继承Dagger组件名字类,并且需要在相应的Modules中通过@ContributesAndroidInjector注解标记需要注入依赖的组建。(ActivityModules.java) from https://www.cnblogs.com/tangpj/p/9874133.html #### 注意事项 1、Component的inject方法接收父类型参数,而调用时传入的是子类型对象则无法注入,也就是说无法使用多态方式进行注入。 2、component关联的modules中不能有重复的provide 3、module的provide方法使用了scope,那么component就必须使用同一个注解 4、module的provide方法没有使用scope,那么component和module是否加注解都无关紧要,可以通过编译 5、component的dependencies与component自身的scope不能相同,即组件之间的scope不同 6、Singleton的组件不能依赖其他的scope的组件,只能其他scope的组件依赖Singleton的组件。 7、没有scope的component不能依赖有scope的component 8、一个component不能同时有多个scope(Subcomponent除外) 9、@Singleton的生命周期依附于component,同一个module有provideXX()提供一个实例,且被@Singleton标注,针对不同的component,创建的实例不同。同一个module被不同的@Component依赖结果也不一样. from https://www.jianshu.com/p/466a4c9bfa42 #### 划分 Component规则和Component间组织方式 参考https://mp.weixin.qq.com/s/PpZFasN0sWwf6dQXc7eG9g ## 如何理解scope(当前进度) https://blog.csdn.net/xx326664162/article/details/67640509 http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/ 翻译:https://www.bbsmax.com/A/n2d9VKYzDv/ ### 划分Scope 参考https://mp.weixin.qq.com/s/PpZFasN0sWwf6dQXc7eG9g 参照https://github.com/JessYanCoding/MVPArms/wiki 的demo总结些到sample ### AndroidInjectionModule和AndroidSupportInjectionModule AndroidInjectionModule可以帮我们将安卓中四大组件以及Fragment进行绑定,AndroidSupportInjectionModule可以额外支持V4包下的Fragment. Fragment能够作为宿主,是因为继承的DaggerFragment实现了HasSupportFragmentInjector接口,及@ContributesAndroidInjector表明了改Fragment类需要使用依赖注入功能。同理Activity