Dagger2如何使用

这篇文章主要介绍了Dagger2如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

创新互联是一家集网站建设,临夏州企业网站建设,临夏州品牌网站建设,网站定制,临夏州网站建设报价,网络营销,网络优化,临夏州网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

什么是Dagger2

Dagger2是Dagger的升级版,是Android目前最好用的依赖注入框架,在编译期间自动生成代码,负责依赖对象的创建。第一代由Square公司共享出来,第二代则是由谷歌接手后推出的。

为什么我要使用Dagger2

我们使用Dagger2的主要目的是降低类与类之间的耦合度,举个例子。

Dagger2如何使用

这里有一个Person类,我们在这个类里面,想使用RichPerson类中的方法,那么我们就需要在Person类中拿到RichPerson的实例,也就是说Person和RichPerson耦合到一起了,违背了单一职责。如果还有很多类都要使用RichPerson类中的方法,那么就会有很多类跟RichPerson这个类耦合起来,一旦RichPerson构造方法变了,比如需要传入一个id才能使用,那么所有使用RichPerson的类都需要改,这个工作量可不小,而且这样也违背了开闭原则。
这个时候如果我们使用Dagger2,我们就可以在Person类中通过@Inject的方式拿到RichPerson实例而不需要在Person中去new RichPerson

Dagger2如何使用

使用(基于Kotlin)

在项目的build.gradle中,添加

apply plugin: 'kotlin-kapt'
dependencies {
 kapt 'com.google.dagger:dagger-compiler:2.14.1' 
 implementation 'com.google.dagger:dagger:2.14.1'
}

这里我们就以MVP模式为例

1.传统MVP

在View层我们想要去获取数据,那么我们就要去通过构造拿到P层对象

Dagger2如何使用

这边gif我就不演示了,单纯的吐司提示而已,这种传统的MVP会在View层去实例化Persenter

2.Dagger2方式MVP

那么用Dagger2的方式,我们应该怎么在V层拿到P层的引用呢?

1.我们需要在P层的构造方法中添加一个@Inject注解,告诉Dagger2,我是可以通过注解拿到的

Dagger2如何使用

2.给你任何需要用@Inject注解拿对象的类创建一个Component类,这一步其实就是相当于告诉Dagger2,我这个类需要用到@Inject拿对象哦

Dagger2如何使用

3.Build——>Make Project,Dagger2会自动生成Dagger+***Component,比如

Dagger2如何使用

4.在V层中通过@Inject和Component拿到实例对象

Dagger2如何使用

到此,Dagger2基本使用完毕,我们可以通过@Inject拿到我们想要的任何对象(这个对象的构造方法前面需要添加@Inject),并且不需要new

V层拿P层,P层拿V层

上面的方式,我们可以在V层拿到P层的引用并且去调用P层的方法,那么如果我们需要在P层中拿到V层的对象,该怎么办呢?给P层也定义一个Component?不是的,这里,我们需要用到一个新的知识点,Module

那么,什么是Module呢,我个人的理解,就是把我本身提供出去,给其他类使用

1.在P层的构造中添加@Inject注解并添加V层的参数

Dagger2如何使用

2.给V层定义一个对应的Module,把自己提供出去

Dagger2如何使用

3.创建V层对应的Component,与上面不同的事,我们这里需要定义一个Module

Dagger2如何使用

4.Build——>Make Project,自动生成Dagger+***Component

5.调用

Dagger2如何使用

可能到这里你还是懵的,怎么调用一下这些方法,就把自己传过去了呢?莫慌,接下来带你去Dagger2生成的代码中去看看。

DaggerMainActivityComponent.builder()返回了一个Builder

Dagger2如何使用

builder是空构造,那么我们继续往下看

Dagger2如何使用

.mainActivityModule(MainActivityModule(this))把自己传进去,这里
做了一个非空判断之后给成员变量赋值,然后返回Builder本身

Dagger2如何使用

  .build()如果上面传入的值是null,抛异常,否则调用Comopent构造并传入builder

Dagger2如何使用

Dagger2如何使用

把Builder中的module赋值给Component中的module

Dagger2如何使用

 .inject(this)传入自身(这里的this就是activity本身)

Dagger2如何使用

调用injectMainPresenter方法,后面的getMainPresenter拿到presenter对象,然后给activity中@Inject注解的presenter赋值

Dagger2如何使用

new Presenter的时候传入了activity,完成赋值

Dagger2如何使用

Dagger2如何使用

至此我们的对象实例化完成。

感谢你能够认真阅读完这篇文章,希望小编分享的“Dagger2如何使用”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


网站标题:Dagger2如何使用
文章路径:http://scyanting.com/article/jdigsd.html