Dagger2 同时引用多个 Module 的三种写法
来源:互联网 发布:万信达软件官网 编辑:程序博客网 时间:2024/05/17 04:47
在一个界面中,我们很多时候会同时用到两个或者以上的 Module ,这里整理一下 Dagger2 添加多Module 的用法,这里先贴一些示例需要的代码,至于基础使用方式,这里就不多说明了:
ApiService
public class ApiService { OkHttpClient okHttpClient;// @Inject public ApiService(OkHttpClient okHttpClient) { LvLog.i("ApiService: "); this.okHttpClient = okHttpClient; }}
UserModule
@Modulepublic class UserModule { @Provides public ApiService provideApiService(OkHttpClient client) { return new ApiService(client); }}
HttpModule
@Modulepublic class HttpModule { @Provides public OkHttpClient provideOkHttp() { LvLog.i("provideOkHttp: "); return new OkHttpClient.Builder().build(); }}
Component
@dagger.Component(modules = UserModule.class)public interface Component { // 这里对 Module 和 Activity 进行关联 void init(Dagger2Activity activity);}
现在因为我们 UserModule 中 初始化 ApiService 会需要用到 OkHttpClient 实例,但是,这个实例是在 HttpModule 中实现的。那么,我们该如何去添加呢,来看一下下面的 三 种方式。
方式一:
在 Module 注解中使用 <include>
标签
@Module(includes = {HttpModule.class})public class UserModule { ...}
方式二
在 Component 注解后添加多个 Module.
@dagger.Component(modules = {UserModule.class,HttpModule.class})public interface Component { // 这里对 Module 和 Activity 进行关联 void init(Dagger2Activity activity);}
方式三
在 Component 中添加 dependencies 属性。
新建一个 HttpComponent,配置 HttpModule
@dagger.Component(modules = HttpModule.class)public interface HttpComponent {// 这里需要对外暴露出获取 OkHttpClient 的方法,方法名不需要和 HttpModule 中保持一致。 OkHttpClient provideOkHttp();}
(ps 如果 HttpComponent 中没有提供对方暴露的方法,则会提示 cannot be provided without an @Inject constructor or from an @Provides-annotated method.)
然后在 Component 引用:
@dagger.Component(modules = {UserModule.class}, dependencies = HttpComponent.class)public interface Component { // 这里对 Module 和 Activity 进行关联 void init(Dagger2Activity activity);}
注入方式
正常情况下,一个或者多个 Module 注入方式如下:
- 注入方式一
DaggerComponent.create().init(this);
- 注入方式二
/// 如果 module 中需要传入参数,则可通过此种方式。DaggerComponent.builder() .userModule(new UserModule()) .httpModule(new HttpModule()) .build().init(this)
当然,如果 Module 中需要传入参数的时候,就只能需要使用第二种方式了,
- 注入方式三
此外,就像我以上整理的 方式三 添加多个 Module ,这里就不能使用上面两种方式了,
这个时候就需要使用以下注入方式了:
DaggerComponent.builder() .userModule(new UserModule())// .httpComponent(DaggerHttpComponent.create()) // 调用方式一 .httpComponent(DaggerHttpComponent.builder().httpModule(new HttpModule()).build()) // 调用方式二 .build().init(this);
这里就整理出这些基础操作,至于需要添加其他注解,此处就不多做说明了。
示例代码
阅读全文
0 0
- Dagger2 同时引用多个 Module 的三种写法
- 同时编译多个版本的脚本写法
- Java引用多个jar包的写法
- 三种不同样式的打开折叠内容,包括同时折叠多个
- IIS服务器同时设置多个网站的三种方式
- MDX多条件同时满足的写法
- Android Studio 关于多个module引用同一jar包的问题
- Andrid studio 引用多个module时jar包重复的解决
- C#程序集系列03,引用多个module
- Java -cp 命令行引用多个jar包的简单写法(Windows、Linux)
- module的认识和写法
- 数组的三种写法
- 依赖的三种写法
- 赋值的三种写法
- 三种urls的写法
- Action的三种写法
- swap的三种写法
- for的三种写法
- 结构体的存储分配问题
- 机器学习笔记(V)线性模型(I)一维最小二乘法
- 关于c++和C的getXXX系列函数
- DataStructureProject(3)
- linux基本操作---用户以及文件权限
- Dagger2 同时引用多个 Module 的三种写法
- Lvs+Ldirectord+Heartbeat
- canvas雨滴绘制总结(三)
- IO流(12)--装饰设计模式
- 替换死亡节点(三)
- Latex 公式太长等号对齐,argmin 符号在正下方,
- Web Api + Token + 签名
- sort 命令详解
- 关于校赛