依赖注入之Dagger2框架在工程中的使用

在介绍Dagger2之前,了解一下使用Dagger2的背景:

一般情况下,实例Man包含到实例Car,则实例Man依赖实例Car。如下图1:

18582563-4c7bc5eb6efd5b82

这种直接依赖的情况存在不好的情况,若car构造函数变化,则需要直接修改Man类。

使用依赖注入用于实现控制反转的常用方式。控制反转的基本思想是:借助“第三方”实现具有依赖关系的对象之间的解耦。一开始是对象 A 对 对象 B 有个依赖,对象 A 主动地创建 对象 B,对象 A 有主动控制权,实现了 Ioc 后,对象 A 依赖于 Ioc 容器,对象 A 被动地接受容器提供的对象 B 实例,由主动变为被动,因此称为控制反转。很简单的说就是,本来Man直接依赖Car的,现在Man不想被Car完全绑住,所以它希望有个中介接入,至于这个中介(Ioc)怎么处理得到的Car不是它关心的,它只希望需要的时候这个中介(Ioc)能返回它需要的就行。而Dagger2就是处理这个事情,如Module提供了创建Car实例的能力。

Dagger框架是Java和Android下的一个完全静态、编译时生成代码的依赖注入框架。Dagger2框架的最大好处就是解耦,使得依赖方和被依赖方的耦合性尽量减少。正是在解耦的基础上,才使得我们在管理类实例上更方便,我们一般会使用一个AppComponent管理整个app的全局性实例,和部分业务有关的交由子SubComponent处理,分工明确,同时,不用在每个地方都new一个实例,减少重复劳动力,这些Dagger2框架都给做到。

某某宝工程中,确定了公共的全局性实例,这些实例包括环境配置实例(EnviromentConfiguration)、网络请求实例(OkHttpClient)等。如下图所示。

18582563-0cb0d651795711fe.png

工程中图2的依赖注入loc容器,对应的抽象依赖关系如图3所示:Activity1、Activity2、Activity3共同依赖CommonInstance、Fragment1、Fragment2的实例依赖Activity1,其他的一样。则使用dagger框架进行依赖注入的时候,相关的Component关系就形如下图所示。

18582563-a42552796da96670
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值