Android Dagger 2
Dagger 2 依赖注入
1. 基本概念
最重要有四个概念,也是四个注解(annotation),Provide,Inject,Module,Component。
Provide 是提供者,创建实例。
@Provides
static NetworkApi provideNetworkApi(){
return new NetworkApi();
}
Inject 就是注入,意思是去寻找这个实例。这个实例由之前的 Provide 提供。
public class MainActivity extends AppCompatActivity {
@Inject
NetworkApi networkApi;
}
Module 是用于存放所有 Provide 的容器。
@Module
public abstract class MyApplicationModule {
@ContributesAndroidInjector
abstract MainActivity contributeActivityInjector(); @Provides
static NetworkApi provideNetworkApi(){
return new NetworkApi();
}
}
Component 是注入器,用于管理所有需要注入的实例,也是实例提供者和注入者的桥梁。它是一个 interface。
@Component(modules = { AndroidInjectionModule.class, MyApplicationModule.class})
public interface MyApplicationComponent extends AndroidInjector<MyApplication> {}
2. 实例的提供
实例有两种提供方式,一种就是刚刚提到的在 Module 中的 Provide 方法。另一种是直接在类的构建函数里加上 Inject 注解,这样它就变成了默认的可以直接被 Dagger 调用的构造函数。它就是实例的提供者。
3. 在 Android 项目中使用 Dagger
1. 在项目中导入 Dagger。在 app 下的 build.gradle 里 :
dependencies {
// Dagger2
compile 'com.google.dagger:dagger:2.x'
compile 'com.google.dagger:dagger-android:2.x'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'
annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
}
android {
configurations.all {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:2.0.1'
}
}
2. 创建用于被注入的类,如前面示例中的 NetworkApi。如果需要,可以在某个构造函数上加 Inject 注解作为实例提供者。
3.
参考文章:
http://www.andevcon.com/news/keddit-part-10-kotlin-dagger-2-dependency-injection
http://blog.csdn.net/soslinken/article/details/52184113
http://www.jianshu.com/p/01d3c014b0b1
Android Dagger 2的更多相关文章
- Android Dagger依赖注入框架浅析
今天接触了Dagger这套android的依赖注入框架(DI框架).感觉跟Spring 的IOC差点儿相同吧.这个框架它的优点是它没有採用反射技术(Spring是用反射的),而是用预编译技术.因为基于 ...
- Android Dagger 2 无法自动生成 Dagger Component
给项目升级 gradle(3.0)和 build(27)后发现 Dagger 2 无法自动生成 Dagger Component 类了. 原因竟是我把 : kapt 'com.google.dagge ...
- 2015-2016最火的Android开源项目--github开源项目集锦(不看你就out了)
标签: Android开发开源项目最火Android项目github 2015-2016最火的Android开源项目 本文整理与集结了近期github上使用最广泛最火热与最流行的开源项目,想要充电与提 ...
- [Android]使用Dagger 2来构建UserScope(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6237731.html 使用Dagger 2来构建UserSco ...
- [Android]使用Dagger 2进行依赖注入 - Producers(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6234811.html 使用Dagger 2进行依赖注入 - P ...
- [Android]在Dagger 2中使用RxJava来进行异步注入(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客: # 在Dagger 2中使用RxJava来进行异步注入 > 原文: 几星期前我写了一篇关于在Dagger 2中使用*Producers*进行 ...
- [Android]使用Dagger 2依赖注入 - DI介绍(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092083.html 使用Dagger 2依赖注入 - DI介 ...
- [Android]使用Dagger 2依赖注入 - API(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092525.html 使用Dagger 2依赖注入 - API ...
- [Android]使用Dagger 2依赖注入 - 自定义Scope(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5095426.html 使用Dagger 2依赖注入 - 自定义 ...
随机推荐
- .NET获取城市信息(将三字代码转换成城市名)
整理代码,发现有一个从两张表里读取城市列表,然后linq和lambda表达式来获取城市名的函数,代码如下: public static string GetCityHotelText(string c ...
- JAVA钩子方法+模板方法
模板方法: 写一个抽象类,这个抽象类有多个抽象方法,里面设立一个模板方法,这个模板方法也可以称之为模板算法,设立不同方法的执行顺序,封装业务流程,暴露出去: 模板方法模式的特点很好总结,它将一般性的可 ...
- Windows 8 Stroe Apps 控件
重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容 ...
- C++中1/0和1/0.0的区别
参考:https://zhidao.baidu.com/question/1494117716904764979.html 问题说明:在Dev中1/0会报错“除数不得为0”,但是1/0.0不报错,并且 ...
- Java数组的初始化
1.动态初始化 数据类型 [] 变量名 = new 数据类型 [数组大小]; //数组的动态初始化 int [] arr = new int [3]; 2.静态初始化 数据类型 [] 变量名 = {元 ...
- 使用express框架和mongoose在MongoDB新增数据
1.安装 express npm i express --save 2.安装 mongoDB npm i mongodb --save 3.安装mongoose npm i mongoose --sa ...
- 程序员面试50题—sizeof的用法(6)
以下为Windows下的32 位C++程序,请计算sizeof 的值void Func ( char str[100] ){sizeof( str ) = ?}void *p = malloc( 10 ...
- POJ 3388 Japanese Puzzle (二分)
题意:给你一个n*n 的图,你总共有k 种花砖,告诉你每一种花砖的个数,让你随便安排它们的位置,问你最多有多少行和第一行是一样,并且要输出第一行的一定存在的图案. 析:首先这个题如果读懂了题意,一点也 ...
- java并发里的一些基础概念
转载自:https://my.oschina.net/hosee/blog/597934: 摘要: 本系列基于炼数成金课程,为了更好的学习,做了系列的记录. 本文主要介绍 1.高并发的概念,为以后系列 ...
- ArcGIS API for Silverlight/ 开发入门 环境搭建
Silverlight/ 开发入门 环境搭建1 Silverlight SDK下载ArcGIS API for Microsoft Silverlight/WPF ,需要注册一个ESRI Gloab ...