Dagger2学习笔记

8 篇文章 0 订阅
5 篇文章 0 订阅

Dagger需要注入依赖的地方,需要@Inject的注解,共有三种inject方式:Identifies injectable constructors, methods, and fields. 
constructors首先被注入,然后是method和field,父类中的method和field会先于子类中的method和field注入,同一个类中的fields和methods注入注入不分先后。当类中含有@Inject注释的成员变量, 却没有@Inject注释的构造函数时, Dagger将使用类的默认构造函数。若类中缺少@Inject注释, 该类是不能由Dagger创建的。


1、Constructors 
在构造方法添加@Inject注解,指明Constructor的参数需要dependency,这些参数可以被使用在private或final字段。需要指出的是一个类只能有一个构造方法可以被inject,否则会报:Error: Types may only contain one @Inject constructor.

2、Methods 
在成员方法添加@Inject注解,成员方法不可以是抽象的,指明方法参数需要依赖。一般会这样用:inject(this)。

3、Fields
在成员变量上加@Inject,不可以是private或者是final字段。


@Provides 提供的依赖如果没有提供给子图,只注入一个对象实例,建议直接new一个对象出来,将其它已生成的依赖传入。如果直接将依赖对象当做参数传进来,会生成对应的工厂方法,增加程序运行成本。

例如:

注: Generating a MembersInjector or Factory for ElectricHeater. Prefer to run the dagger processor over that class instead.

@Provides Heater provideHeater(ElectricHeater electricHeater) {
    return electricHeater;
}

@Provides Heater provideHeater() {
    return new ElectricHeater();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值