dagger2记录篇
作为一个码农,什么都不用多讲,贴代码
build project

build module



Application
public class App extends Application {
private AppComponent appComponent;
@Override public void onCreate() {
super.onCreate();
appComponent= DaggerAppComponent.builder()
.appModule(new AppModule(this))
.build();
}
public AppComponent getAppComponent() {
return appComponent;
}
}
AppComponent
@Singleton
@Component(modules = { AppModule.class })
public interface AppComponent { @ContextLife("Application")
App getApplication(); RetrofitHelper retrofitHelper(); //提供http的帮助类 }
AppModule
@Module
public class AppModule {
private App application; public AppModule(App application){
this.application=application;
} @Provides
@Singleton
@ContextLife("Application")
public App provideApplication(){
return application;
} @Provides
@Singleton
public RetrofitHelper provideRetrofitHelper() {
return new RetrofitHelper();
} }
ActivityComponent
@ActivityScope
@Component(dependencies = AppComponent.class, modules = ActivityModule.class)//关联上下
public interface ActivityComponent { Activity getActivity(); void inject(LoginActivity loginActivity);//要在类中使用注入功能
void inject(MainActivity mainActivity); }
ActivityModule
@Module
public class ActivityModule { private Activity mActivity; public ActivityModule(Activity activity) {
this.mActivity = activity;
} @Provides
@ActivityScope
public Activity provideActivity() {
return mActivity;
} @Provides
@ActivityScope
public IPresenterFactory providePresenter(RetrofitHelper retrofitHelper) {
return new PresenterFactory(retrofitHelper);
} }
Base里面使用注入,否则无法注入
public abstract class PresenterActivity extends BaseActivity {
private final static String TAG = "PresenterActivity";
protected abstract void initInject();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initInject();
}
protected ActivityComponent getActivityComponent(){
return DaggerActivityComponent.builder()
.appComponent(App.getInstance().getAppComponent())
.activityModule(getActivityModule())
.build();
}
private ActivityModule getActivityModule() {
return new ActivityModule(this);
}
}
此时前提条件都有了
点击运行自动生成注入代码(没问题的前提)
使用注入:
public class MainActivity extends PresenterActivity {
@Inject
protected IPresenterFactory mPresenter;//没有创建对象,inject标签注入类型
private final int BASIC_PERMISSION_REQUEST_CODE = ;
private TextView username;
@Override
public void findView() {
username = findView(R.id.username);
username.setText(App.getInstance().getUserEntity().getName()+" hello");
}
@Override
public void init() {
if (mPresenter != null){
Toasts.showShort("mPresenter success",context);//注入成功会打印出success
}
}
@Override
public int layoutResID() {
return R.layout.activity_main;
}
@Override
protected void initInject() {
getActivityComponent().inject(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent() {
Toasts.showShort("刷新UI",context);
}
}
dagger2记录篇的更多相关文章
- [Django]模型学习记录篇--基础
模型学习记录篇,仅仅自己学习时做的记录!!! 实现模型变更的三个步骤: 修改你的模型(在models.py文件中). 运行python manage.py makemigrations ,为这些修改创 ...
- Retrofit+MVP框架封装记录篇
当下最流行的网络请求组合,retrofit2+okhttp+rxjava+mvp 这里是封装记录篇 首先分模块,比如登录 先来说封装后的使用 package com.fragmentapp.login ...
- git+coding.net记录篇
很久没用了,有些配置快忘记了,记录下来,以供以后参考回忆 首先下载好git插件,然后在as上面设置好本地项目地址 设置好git,点击test测试通过 然后把项目添加到git本地库 你会看到你项目里的文 ...
- GRPC在NET上的实践(记录篇)
GRPC是什么? GRPC是一个开源RPC框架,于2015年3月开源,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于Protobuf 3.0(Protocol Buffer ...
- 2、Flutter 填坑记录篇
1.前言 之前写了一篇文章关于 flutter 初体验的一篇,https://www.cnblogs.com/niceyoo/p/9240359.html,当时一顿骚操作,然后程序就跑起来了. 隔了好 ...
- 被 idea 坑了的记录篇
这个星期真的是波折的一周~~~~ 不得不吐槽下无敌坑的自己了,社会我娜姐,坑起来连自己都坑~~ 其实这也不全算我自己的坑,我只是卸载了idea,重新装了一下而已,很神奇的把idea的几个坑全撞了一遍( ...
- IDEA快速搭建WEB项目【记录篇】
这里用的都是市面上通用的技术,而每个公司都有自己的调用方式,可以根据实际情况与业务场景不同去进行变通 三层架构: 界面层(User Interface layer).业务逻辑层(Business Lo ...
- js实现图片旋转、模板文件查看图片大图之记录篇[二]
一个小小的前端需求送给大家,使用js实现图片旋转,并且点击图片能够实现规定格式的大图. 主要使用的是jQuery的delegate()方法实现图片旋转,该方法主要的功能就是给某个组件绑定一个或一组事件 ...
- 4、Flutter 采坑记录篇二_依赖库不兼容
1.报错信息 Because every version of flutter_test from sdk depends on package_resolver 1.0.4 which depend ...
随机推荐
- PADS Layout 颜色设置
一.板框.装配线.标注线配置: 二.个人爱好,我一般把Top pads设置成为浅绿色,Top Trace/vias/2D Line/Text/Cooper设置成为深绿色,Error设置成为黄色,而Bo ...
- iOS9支付宝无法调起客户端
1.为了适配 iOS9.0 中的 App Transport Security(ATS)对 http 的限制,这里需要对 支付宝的请求地址 alipay.com 做例外,在 app 对应的 info. ...
- [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一
1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...
- hibernate一对一主键双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- EasyUI中那些不容易被发现的坑——EasyUI重复请求2次的问题
问题控件:datagrid.combobox.所有能设置url属性的控件 问题版本:1.4.4.1.4.5(之前的版本没测) 问题如图: 重复请求2次,错误代码如图: 错误问题分析:html加载的时候 ...
- spring源码分析之<context:component-scan/>vs<annotation-config/>
1.<context:annotation-config/> xsd中说明: <xsd:element name="annotation-config"> ...
- Notepad2替代系统自带的记事本
事情是这样的,平时我经常把一些文字复制到记事本中编辑好了再复制到目标位置,可以在系统自带的记事本中替换删除一些内容,记事本小巧,占用很少的资源,我很喜欢:但今天复制的内容中有很多数字和一些我不想要的内 ...
- Oracle使用SQL传输表空间
源环境:RHEL 6.4 + Oracle 11.2.0.4 目的环境:RHEL 6.4 + Oracle 11.2.0.4 DG双机 要求:使用SQL传输表空间DBS_D_JINGYU从源环境到目的 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...