dagger2 笔记

@Provides方法用provide前缀命名
@Module 用Module后缀命名
@Component 以Component作为后缀

Dagger2是通过依赖注入完成类的初始化。
这个过程需要三部分:
#1 依赖提供方(生产者)
#2 依赖注入容器(桥梁)
#3 依赖需求方(消费者)

Component 桥梁
在使用@Component的时候必须要提供scope范围,标准范围是@Singleton

Module 依赖提供方
@Module
#1 @Module 注解类,负责管理依赖。
Module 其实是一个简单工厂模式,Module 里面的方法都是创建相应类实例的方法。
#2 通过@Module获得第三方类库的对象。
#3 @Module是一个依赖提供方的合集。

一些公共的依赖可以放在Component 中
@Component(modules = {ApplicationModule.class, ClientModule.class, GlobalConfigModule.class})
public interface ApplicationComponent {

Application application();

//用于管理网络请求层,以及数据缓存层
IRepositoryManager repositoryManager();

//Rxjava错误处理管理类
RxErrorHandler rxErrorHandler();

OkHttpClient okHttpClient();

//用来存取一些整个App公用的数据,切勿大量存放大容量数据
Map<String, Object> extras();

Gson gson();

}
Component 之间可以通过dependencies依赖
@Component(modules = {LifeFragmentModule.class}, dependencies = {ApplicationComponent.class})
public interface FragmentComponent {
void inject(eFragment Fragment);
}

Inject
主要有两个作用
#1 作为依赖注提供方:
使用@Inject注解构造方法。
注解类的构造函数,让Dagger2帮我们实例化该类,并注入。
#2 作为依赖需求方:

@Provides
#1 注解@Module 类中的方法。
在modules中,我们定义的方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。(就是dagger2 可以使用该modele提供的类gson)
@Module
public class AModule {

@Provides
public Gson provideGson(){
    return new Gson();
}

  //dagger会去查看FragmentModel 是否有提供@Inject的构造方法,没有就会报错
@Provides
LifeFragmentContract.Model provideModule(FragmentModel model) {
    return model;
}

}
public class FragmentModel {

@Inject
public LifeFragmentModel( ) {
  
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值