Dagger2简单使用

在注入的时候需要Component,inject方法需要将被注入的对象传进来,一般都是activity,然后component就会把数据注入给传进来的对象。
    例如Component是C,activity是A,A中有个对象需要被注入,对象为D,需要注入的对象要用@Inject注解,C注入对象需要Module,叫它M。M的类声明外要加@Module。
    首先要初始化C,在C的类声明外要加上
@Component(
modules = {
Module.class,
}
)
这几行代码,modules=一个类数组,标示这C可以用那些类实例化,实例化只是M的一部分用途,后面还有其他的,初
始化方法为
DaggerComonpent.builder().module(new Module()).build();
DaggerComonpent类不是我们创建的,是这个框架帮我创建的,命名规则为Dagger+C,module方法是C对应的M的
首字母小写。这样C就被创建出来了。C是接口,DaggerC是Dagger帮我们创建的接口实现类。
C和M除了初始化还有数据的关系,C种要提供给A的数据是从M中来的,例如A种有个String对象加了@Inject注解,
那在M种就要提供一个返回值是String的方法,用
@Provides注解,该方法返回一个String,A中的String实际
M提供的,但是如果A中有多个同类型的Inject,要怎么和M一一对应,通过@Name("name")注解,name一致。
     因为初始化C需要的类DaggerC是Dagger帮我们创建的,所以开始会报错,需要运行一遍才可以,C也可以实例
子C,在C种添加一个方法,例如叫plus
AnotherC plus(Another M);C和M是通过C类声明前的注解关联的,但是如果用这种方式实例化C,C的注解需要
改变一下
@SubComponent(
modules = {
AnotherM.class,
}
)
意思是子Component的意思。
这样就可以通过其他C的plus方法实例了。
例如用C的plus方法实例PC,对应的M叫PM。前面说过数据是M提供的,如果是用C实例的PC,那么PC的数据要由PM提
供,这里有一个有意思的东西就是M也可以为PM提供数据,例如PC需要为PA inject一个String数据,数据是PM提供
的,假设
由方法PMethod提供。
@Provides
String PMethod(String string) {
return string;
}
可以看出数据虽然是PM提供的,但是方法是需要参数的,这样是运行不起来的,但是如果M中有一个方法
@Provides
String Method(String string) {
return string;
}
那么MC注入的数据就会是M中的这个方法返回的。

还有,如果一个C,注解里可以写多个M,例如M1和M2,那么M1和M2是可以互相传递参数的,就像M给PM提供数据一样

参数的对应关系:如果M中提供一个方法
@Provides
AAAA bbb(@Named("Data") File cacheDir) {
     ...........
}
这个方法需要一个File类型参数,在类型前加@Named("Data")标示这个方法需要传一个名字叫Data的File对象
@Provides
@Named("Data")
File ccc(){
return new File("....");
}
这个方法返回一个File,并且加了@Named注解,就是说这个方法提供一个名字叫Data的File,就和上面的方法对应了!

可以自己定义@Scope
@ViolationScope
@Subcomponent(
modules = {
Module.class
}
)

在M中提供的实例会跟对应的Component生命周期一致
@Provides
@ViolationScope
CarInfo provideCarInfo() {
return carInfo;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值