目录内容
- 引言
- 什么是依赖注入,依赖示例
- 匕首2-简介
- 首次使用Dagger 2
引言
本文不是由高级程序员使用相同,普通和易于理解的词写的。
本文使用Kotlin示例代码。 Dagger版本2.17。 可以在文章末尾下载示例。
什么是依赖注入?
依赖注入(注入或依赖注入)是一类对另一类的依赖。 即 对于一个类的完整操作,需要初始化另一个(他们的)类。
例如,如果没有引擎类,那么汽车类(汽车)就无法工作,而如果没有燃料类,那么汽车类将无法工作。 看起来像这样:
class Car(private var engine: Engine) class Engine ( private var fuel: Fuel) class Fuel(){ private val fuel = if(BuildConfig.DEBUG){ “benzine” } else { “diesel” } }
在此示例中,Car类取决于Engine类,而后者又取决于Fuel类。
匕首2-简介
Dagger是一个有助于实现依赖项注入的库:。 这是一个谷歌图书馆。 详细文档
可在此处获得 。
匕首的优点:
- 我必须写更少的样板代码。
- 帮助结构依赖性。
- 当有很多依赖项时,它极大地简化了工作
- 代码变得易于阅读。
匕首的缺点:
- 缺少详细的文档
- Dagger使用注释尝试了解开发人员的意图。 当他不正确地理解你时,事情变得复杂
- 匕首生成的代码很难发现
首次使用Dagger 2
首先,您需要在应用程序中添加匕首。 我知道2种方法
1.打开build.gradle(App)并添加跟踪。
1.1在插件声明部分的顶部
apply plugin: 'kotlin-kapt'
依赖项中的1.2
{ ... kapt "com.google.dagger:dagger-compiler:$dagger_version" implementation "com.google.dagger:dagger:$dagger_version" }
我在本节中指定了匕首(dagger_version)的版本
ext { dagger_version = '2.17' }
如果不是这种情况,则需要在android部分上方添加该部分。
2.通过项目结构添加Maven存储库-依赖关系-添加库依赖关系
同步项目后,我们准备使用匕首实现依赖项。
首先,创建Car,Engine和Fuel类:
class Car constructor(private var engine: Engine) class Engine constructor(private var fuel: Fuel) class Fuel { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } }
在Car,Engine和Fuel类的构造函数之前,我们添加了dagger Inject批注,从而使dagger理解在必要时应实现这些类。 我们得到了踪影。
class Car @Inject constructor(private var engine: Engine) class Engine @Inject constructor(private var fuel: Fuel) class Fuel @Inject constructor() { private val fuelType = if(BuildConfig.DEBUG){ "benzine" }else{ "diesel" } }
Dagger需要知道如何创建它需要实现的所有对象。 为了列出我们实现的所有类(Inject),使用了
Component注释,该注释是为接口(DaggerComponent)声明的。
看起来像这样:
@Component interface DaggerComponent { fun getCar(): Car fun getEngine(): Engine fun getFuel(): Fuel }
声明组件方法时,重要的不是方法名称,而是它们返回的类。
在这一步,您需要构建一个项目(Build-Rebuild project)。 之后,匕首将生成必要的类和工厂以初始化组件。 工厂的名称将与我们在其中初始化匕首类的接口的名称一致,不同之处在于将添加前缀“ Dagger”,即 在输出中,我们获得DaggerDaggerComponent类。
一切准备就绪。 让我们尝试在MainActivity中创建Car类型的car字段:
private var car: Car = DaggerDaggerComponent.create().getCar()
通过启动应用程序,可以确保在访问汽车场时已对其进行了初始化。
源代码