• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Kotlin怎样使用Android的Dagger2,kotlindagger2

Kotlin怎样使用Android的Dagger2,kotlindagger2

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android dagger2使用,kotlin android,kotlin开发android,kotlin android教程,androidstudio kotlin等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Kotlin怎样使用Android的Dagger2,kotlindagger2


作者:Antonio Leiva

时间:Apr 11, 2017

原文链接:https://antonioleiva.com/dagger-android-kotlin/

 

 

在Android上,创建去耦以及容易测试代码的几乎每位迟早都要诉诸Dagger。

 

虽然,在Kotlin中设置Dagger有一些不同,但是大多数都十分简单,仅需要几个步骤。今天我就在这里讲解。

 

同时要意识到,由于Kotlin的能力,还有其他方法可以解决注入问题,甚至在Kotlin中还有一些专门的库来解决。

 

但是Dagger仍然是有效的选择,即使不是最最通用的,也是其中之一。

 

 

提示:

 

在这篇文章中,我不会解释怎样使用Dagger 2,这是已知的。如果你有任何问题,可以阅读我之前写过一些关于依赖注入的文章。

 

用Dagger 2配置项目

 

如果在你的项目中,你已经配置了Kotlin插件,你需要做的就是配置kapt。

 

如果你已经使用过Dagger,你大概知道apt.kapt是Kotlin的一个版本,它为Dagger创建了需要的自生成类。

 

为了配置它,你需要将下面内容加入build.gradle:

1 kapt {
2     generateStubs = true
3 }

 

你能够将其加入在依赖节之前。如果愿意,你能够使用新的实验性插件,它已经相当稳定了:

 

1 apply plugin: 'kotlin-kapt'

 

 

现在,你就需要加入Dagger编译器的依赖关系(是使用kapt而不是包括在apk中)和实际的库:

1 kapt 'com.google.dagger:dagger-compiler:2.5'
2 compile 'com.google.dagger:dagger:2.5'

 

这样一切就绪,可以开始使用Dagger。

 

主模块的实现

 

 

你可能知道,对于主图形,你需要一个Module和一个Component。

 

在这个简单的例子中,应用模块仅返回应用自己的实例。

 

 

为了这样做,我们将用@Module注解创建一个类,通过构造函数接收应用实例,将其保存到属性中,用@Provides@Singleton注解的方法返回它。

1 @Module class AppModule(val app: App) {
2     @Provides @Singleton fun provideApp() = app
3 }

 

你可以看到,即使对于这样简单的类,其代码也要比用Java简单得多。

 

接着我们要实现Component,它需要加载一个模块数组,并且说明谁能够手动注入它:

1 @Singleton
2 @Component(modules = arrayOf(AppModule::class))
3 interface AppComponent {
4     fun inject(app: App)
5 }

 

再就只创建一个App类,它将负责生成图片:

 1 class App : Application() {
 2 
 3     val component: AppComponent by lazy {
 4         DaggerAppComponent
 5                 .builder()
 6                 .appModule(AppModule(this))
 7                 .build()
 8     }
 9 
10     override fun onCreate() {
11         super.onCreate()
12         component.inject(this)
13     }
14 }

 

这里看到的有趣的事是,由于lazy声明,我们能够在属性的定义中指定图形的值,因此就获得了对该属性的只读访问权。

 

 

在component.inject (this)完成前,代码定义的属性不会被执行,所以到那时,this已经存在了,就可以安全地创建了。

 

每个模块实现的范围

 

 

模块的范围仅允许图部分在其它的对象生命周期中生存。

 

 

用这种方法,例如,我们可以在Activity的生存中创建子图。

 

 

 

我们会用依据需要创自己的建模块:

 

1 @Module
2 class HomeModule(val activity: HomeActivity) {
3 }

 

 

Subcomponent非常类似前面所述方法,表明它会注入HomeActivity:

 

1 @Singleton
2 @Subcomponent(modules = arrayOf(HomeModule::class))
3 interface HomeComponent {
4     fun inject(activity: HomeActivity)
5 }

 

 

AppComponent的plus方法,表示这个组件能够加入到子组件的类型:

1 interface AppComponent {
2     ...
3     fun plus(homeModule: HomeModule): HomeComponent
4 }

 

现在,你就只需要在HomeActivity中声明子组件:

1 val component by lazy { app.component.plus(HomeModule(this)) }

 

你可在setContentView

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Kotlin怎样使用Android的Dagger2,kotlindagger2
  • Android项目使用Dagger2进行依赖注入

相关文章

  • 2018-01-28android Listview的自定义界面的使用
  • 2017-05-26Android开发笔记(9)——初步设置Menu,androidmenu
  • 2017-05-26Android属性系统简介,android属性简介
  • 2017-05-26Android实战技巧之五十:App的系统签名
  • 2017-05-26ArcGIS for Android地图控件的5大常见操作转,arcgisandroid
  • 2017-05-26一款面试复习应用源码,面试复习源码
  • 2017-05-26多选按钮(CheckBox),多选按钮checkbox
  • 2017-05-26android如何改变editText控件中部分文字的格式,androidedittext
  • 2017-05-26android开发中遇到的问题汇总【九】
  • 2017-05-26Activity被回收导致fragment的getActivity为空,fragmentgetactivity

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android 手机卫士--获取联系人信息并显示与回显,android回显
    • Java Web 开发填坑记- 如何正确的下载 Eclipse,javaeclipse
    • Glide生命周期管理
    • android中实现在矩形框中输入文字,可以显示剩余字数的功能,android字数
    • BottomBar之Android底部菜单,bottombarandroid
    • Android 工程集成React Native 0.44 注意点,androidreact
    • 翻翻git之---一个丰富的通知的工具库 NotifyUtil
    • android 特殊用户通知用法汇总--Notification源码分析
    • Android 之 图片压缩
    • Android--Activity四种启动模式

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有