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 ...
随机推荐
- 项目自动化建构工具gradle 入门1——输出helloWorld
先来一个简单的例子,4个步骤: 1.进入D:\work\gradle\java 目录 ,您电脑没这目录? 那辛苦自己一级一级建立起来吧 新建文件build.gradle,文件内容是: apply p ...
- 利用HTML5 的Datalist 元素实现输入提示
HTML5有无限可能,总是在释出一些新鲜实用的功能,让原生的web环境更加炫酷. 今天看到datalist 这个元素,可以用来预先定义一个输入框的潜在选项,也就是我们在平时项目中经常用jQuery插件 ...
- JavaScript语法
通用变量var 强制整数parseint(): 强制小数parsefloat(): 是不是一个合法的数字isNaN(): if(判断条件) { 满足条件要执行的语句 } else{ 不满足条件要执行的 ...
- xamarin开发UWP元素的初始化设置顺序
在开发xamarin的UWP平台不可避免的遇到一下坑,现记录下来,希望对后面踩坑有帮助. 一.listview的分组问题:当我们使用listview的IsGroupingEnabled=true时,如 ...
- Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事
前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...
- Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索
Atitit 知识管理的重要方法 数据来源,聚合,分类,备份,发布 搜索 1.1. Rss 简易信息聚合(也叫聚合内容 Really Simple Syndication1 1.1. Rss 简易信息 ...
- 游戏服务器菜鸟之C#初探二游戏服务
经过短时间的折腾,为了解决上述问题,我对游戏进行一些简单的重构,以便能解决当前的瓶颈 添加了缓存服务器进行处理一些及时数据和配置数据,来缓解数据库的压力和IO的压力: 只能说解决当前的暂时性问题,但是 ...
- 【.net 深呼吸】自定义特性(Attribute)的实现与检索方法
在.net的各个语言中,尤其是VB.NET和C#,都有特性这一东东,具体的概念,大家可以网上查,这里老周说一个非标准的概念——特性者,就是对象的附加数据.对象自然可以是类型.类型成员,以及程序集. 说 ...
- JavaScript权威设计--JavaScript对象(简要学习笔记七)
1.with语句 语法: width(object){ statement } with语句可用于临时扩展作用域链.作用域链可以按序检索的对象列表,通过它可以进行变量名解析. with将object添 ...
- SQL Server-数据类型(七)
前言 前面几篇文章我们讲解了索引有关知识,这一节我们再继续我们下面内容讲解,简短的内容,深入的理解,Always to review the basics. 数据类型 SQL Server支持两种字符 ...