【Kotlin中使用Dagger2】基础入门篇(一)

kotlin的dagger hilt依赖注入 dagger hilt帮助我们以简单的方式注入了依赖,省去了构造函数注入的操作(如大量的声明传参的依赖),因此我们能更为集中地管理依赖。更为重要的一点是,我们可以更便捷的控制依赖的寿命。以单例为例,在一个完整的项目中,例如数据库的单例只能存在一个,但是我们不会只有一个单例;同时我们可以确定特定依赖项的范围,比如限定某个依赖只能依附于某个activity,这样当activity被销毁时,该依赖的内存也会被清理,进而用于其他地方。 阅读详情

Dagger2作为依赖注入神器相信很多朋友都听说过它的大名。只不过它的有些概念理解起来并不是那么清晰并且在使用的过程中也比较迷糊。我将把自身对Dagger2的理解、使用经验分享给大家希望对大家有所帮助。我将分几节详细介绍Dagger2在Kotlin在如何使用因为在Java中使用方式大同小异所以大家理解了Dagger2无论在Java还是Kotlin都能运用自如。

本节内容

这一小节我们先简单介绍一下Dagger2的基本使用主要包括

  • Dagger2环境配置
  • 依赖注入DI
  • @Inject
  • @Component

Dagger2环境配置

首先需要在Module中build.gradle引入插件Java中使用aptKotlin使用kapt

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-kapt'
}

接下来引入依赖包和编译器

    implementation "com.google.dagger:dagger:2.32"
    kapt "com.google.dagger:dagger-compiler:2.32"

依赖注入

大家记住一点Dagger2是一个依赖注入框架它能做的事就是完成依赖注入。那么什么是依赖注入。我们通过两段代码直观的看一下。

第一种传统方式主动实例化

    lateinit var mPresenter:MainPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mPresenter = MainPresenter()
    }

可以看到成员变量mPresenter是通过构造方法直接实例化。

第二种通过注解注入实例化

    @Inject
    lateinit var mPresenter:MainPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

可以看到这次我们没有调用构造方法而是在成员变量声明时添加了一个注解@Inject这样也能实例化成员变量mPresenter。后面大家会看当调用mPresenter时它并不为空说明我们实例化是成功的。

这就是两种实例化方式一种需要主动实例化一种是被动接收通过注解自动实例化。

@Inject

在上面我们看到注解@Inject能够实例化对象那它到底是什么

  • @Inject是Dagger2内置的一个注解
  • @Inject用来标注目标对象如上面的mPresenter
  • @Inject用来标注依赖类的构造方法如上面的MainPresenter

上面三点前两点都好理解第三点“标注依赖类的构造方法”是什么意思直接看代码

    class MainPresenter @Inject constructor() {
        fun doSomething():String{
            return "This is result"
        }
    }

可以看到我们定义了一个类MainPresenter在它的构造方法上添加了@Inject注解由于有注解出现显示无参构造器constructor同时定义了一个方法doSomething返回一个字符串。

为什么需要在MainPresenter构造方法上添加@Inejct大家看下mPresenter的类型是不是MainPresenter。这就告诉编译器MainPresenter可通过Dagger2注入到目标类为MainPresenter类型的变量通过构造方法实例化。

@Component

现在我们有@Inject标注的目标类也有@Inject标注的依赖构造方法那它们是不是就可以直接实例化了答案是否定的它们现在是独立的并不知道对方的存在如何将它们联系起来 那就需要一个桥梁—Component把依赖类连接到目标类。

首先我们看一下Component如何声明

    @Component
    interface MainComponent {
        fun inject(activity:MainActivity)
    }

可以看到我们定义了一个接口(必须是接口或抽象类)使用@Component进行标注同时提供了一个方法inject。inject中的参数就是我们需要注入开始的类。

OK现在我们桥梁Component也有了如何让桥梁起作用。编译一下编译一下编译一下说三遍。编译完成后会生成一个以“Dagger”开头的Component文件如DaggerMainComponent接下来咱们使用一下

    class MainActivity : AppCompatActivity() {

        @Inject
        lateinit var mPresenter:MainPresenter

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

            initInjection()
   
            mClickBtn.setOnClickListener {
                toast(mPresenter.doSomething())
            }
        }

        /*
            Dagger2注入注册
         */
        private fun initInjection() {
            DaggerMainComponent.builder().build().inject(this)

        }
    }

可以看到要想桥梁起作用需要调用DaggerMainComponent的inject方法进行“注册”。
以上代码在使用mPresenter之前需要Dagger2注册其中有一个按钮点击的话会弹一个Toast,内容就是mPresenter的返回值。如果mPresenter为空肯定报异常了。如果一切正常说明注入是成功的。

Kotlin中Inject注解使用指南 在 Kotlin 中,@Inject通常用于。 阅读详情

相关推荐

(Android) 在Kotlin项目中使用Dagger2

前言:本文不会介绍Dagger2如何使用,假设大家已经能够在java项目中使用dagger2今天在kotlin项目中配置了一下dagger2,发现和java中略有不同,写篇文章记录一下。项目配置首先,我们需要在gradle file里面配置kapt。如果在java中使用过dagger,肯定知道apt,apt是一个gradle插件,协助Android Studio 处理annotation proc...

z_Younggg的专栏 1072

Kotlin 注解注入库:Kotlin-Inject

在当今的软件开发中,依赖注入(Dependency Injection)是一种有效的设计模式,可以帮助我们实现更清晰、可测试和易于维护的代码。对于Kotlin开发者来说,`kotlin-inject` 是一个强大的编译时依赖注入库,它能简化你的编程体验,并提高代码质量。 ## 项目介绍 `kotlin-inject` 是由 Evan Tatarka 开发的一款轻量级、高性能的依赖注入库。这个库...

gitblog_00081的博客 948

kotlin-inject:kotlin的依赖注入库

kotlin-inject:kotlin的依赖注入库

Kotlin中使用Dagger的坑:@Inject报错

最近开发App,由于学了些kotlin,感觉挺实用,比java要简洁,就用到项目中了 当用到dagger是,使用kotlin写的类,@Inject注入的时候报错了 注入失败了,然后我看了一下java的注入写法,以及@Scope都一样,java就没有问题 然后觉得应该是kotlin注入需要特殊处理,之后就发现了这篇文章https://blog.youkuaiyun.com/qq_26585943...

sese12138的博客 2384

kotlin使用Dagger2的过程全纪录

前言 Dagger2作为依赖注入神器,相信很多朋友都听说过它的大名。只不过它的有些概念,理解起来并不是那么清晰,并且在使用的过程中,也比较迷糊。 Dagger2有Google接手开发的一个基于JSR-330标准的依赖注入框架,它会在编译期间自动生成相关代码,负责依赖对象的创建,达到解耦目的。 下面将详细介绍关于kotlin使用Dagger2的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 kotlin中配置Dagger2 在app模块的build.gradle文件中进行如下配置,关于kapt的相关知识。 apply plugin: 'com.android.app

类银河恶魔城学习记录1-1 Player状态机的搭建 P28

什么是状态机?一篇文章就够了 - 知乎说实话,目前并不能深入理解状态机的奇妙之处(当然,我觉得状态机作为教程的重要组成部分是不得不理解的,所以以下我会对游戏教程内的状态机做一些我认为的解释,如有错误,请多包涵)

Homura_的博客 2338

【Kotlin中使用Dagger2】基础入门篇(二)

目录 1. MainModule 2. MainPresenter 3. MainComponent 4. MainActivity 1.1 MainModule_ProvideStringFactory 2.1 MainPresenter_Factory 3.1 DaggerMainComponent 4.1 MainActivity_MembersInjector @Inject+@Component+@Module(含@Provides) 有些实例类型,我无法掌控 别慌!@..

u010194271的博客 453

代码复现——SymAgent:一种用于知识图谱复杂推理的神经符号自学习Agent框架

根据《SymAgent: A Neural-Symbolic Self-Learning Agent Framework for Complex Reasoning over Knowledge Graphs》(《SymAgent:一种用于知识图谱复杂推理的神经符号自学习Agent框架》)论文思路,简单复现代码,以实现SymAgent中的Agent-Planner和Agent-Executor模块。Agent-Planner利用大语言模型的归纳推理能力从知识图谱中提取符号规则,指导高效的问题分解。

qq_60040306的博客 1604

Dagger2 在 Kotlin 中的使用

Dagger2 在 Kotlin 中的使用 Dagger2 的基础知识和概念并不会在此文中过多描述,可以查阅 https://www.jianshu.com/p/c985e3f262f2 依赖 版本比较旧,可自行更新到最新版本 implementation 'com.google.dagger:dagger:2.21' implementation 'com.google.dagger:dagger-android-support:2.21' kapt 'com.google.dag

郑凯希的博客 860

OpenEarthMap 与 xBD 数据集合并

整合好的数据:链接: https://pan.baidu.com/s/1uJ_Zg6n-s3u1D49OW52D7Q?pwd=2vwx 提取码: 2vwx完整整合步骤与代码如下。

qq_60293814的博客 1593

ROS2实战:手把手教你用walking机器人仿真实现医院多楼层自动配送(含实时地图切换)

本文详细介绍了如何利用ROS2和walking机器人仿真平台实现医院多楼层自动配送系统,重点讲解了动态地图切换技术和多楼层导航的实现方法。通过实时加载地图和优化电梯过渡策略,解决了医院复杂环境下的自主配送难题,为医疗物流自动化提供了实用解决方案。

weixin_29090917的博客 360

Dagger2 Kotlin版 基础讲解(一)

Dagger2 作用:举例解释 例1:相当于SpringBoot的@AutoWrite 自动注入,可以注入接口、类、第三方控件等 例2:相当于 自动实例化对象、接口 A a = new A() 例3:MVP模式中的P层的引用就可以通过Dagger2来注入,当然你还可以通过反射来实现 前期准备: dagger官网 可以查看最新版 或者 是java版还是需要引入kotin版 ...

fayangzhou的博客 809

特殊通信领域场景应用:基于Simulink的数字预失真(DPD)算法仿真建模示例

增益压缩:高功率输入时输出信号的增益下降。相位失真:输入信号的相位随功率变化而改变。带外干扰:非线性失真会引入额外的频谱分量,影响邻道信号。多项式模型:用多项式拟合功率放大器的非线性特性。查找表(LUT):通过离线训练生成预失真映射表。自适应算法:实时调整预失真参数以动态补偿失真。发送端:生成随机比特流并调制为射频信号。预失真模块:对输入信号进行预失真处理。功率放大器模块:模拟非线性失真。接收端:解调信号并评估误码率(BER)。

xiaoheshang_123的博客 272

Kotlin MVP with Dagger2: 深入实战教程

Kotlin MVP with Dagger2: 深入实战教程 本教程将引导您了解并使用一个开源项目——Kotlin MVP Dagger2,它演示了如何在Android应用程序中运用Kotlin编程语言结合Model-View-Presenter(MVP)设计模式、Dagger2依赖注入框架以及Retrofit网络请求库。这个综合性的示例展示了如何构建结构清晰、易于测试的现代Android应用。...

gitblog_00468的博客 700

30 中望CAD二次开发(ZRX C++)-windows下的qt开发

本文介绍了中望CAD在windows下,如何使用qt开发插件界面,给出了具体的编码步骤,并生成了模态对话框和非模态对话框,其中非模态对话框可以调用CAD命令,实现交互操作。

cilvsuanna的博客 189

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知 文章目录Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知1.实现思路2.新增钉钉机器人并测试消息的发送2.1.新增钉钉机器人2.2.测试发送消息到钉钉3.在Jenkins中新建一个构建任务3.1.新建任务3.2.配置任务时增加参数化构建过程3.3.配置任务添加git地址3.4.配置构建触发器生成gitlab webhook使用的token3.5.配置任务构建过程中执行的She

江晓龙的博客 3808

Dagger 2 完全解析(一),基本使用与原理

Dagger 2 完全解析系列: Dagger 2 完全解析(一),Dagger 2 的基本使用与原理 本系列文章是基于 Google Dagger 2.23.2 版本, Kotlin 1.3.21版本 依赖注入 什么是依赖 依赖(Dependency) 是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义, 一般而言,依赖关系在语言中体现为局部变量、方法的形参,或者对静态方法的调用。...

xiaowu 专栏 2442

Python爬虫实战:美团商家数据采集系统

本文将详细介绍如何使用Python最新技术栈构建高效的美团商家信息采集系统。内容涵盖异步爬虫、反爬对抗、数据存储、可视化分析等完整流程,提供可落地的代码方案和工程实践。

2201_76125261的博客 2658

MVP + Dagger2 + Kotlin 随笔

这些工具的使用入门门槛还是挺高的,属于架构设计层次。所以边学习边记录一些学习过程的知识。其中涉及大量转载知识点。 MVP+Dagger2 + + KotlinMVPDagger2引入插件和依赖Dagger2注解的一些规约Dagger2结构简单描述插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出

lilie008的专栏 369

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Kotlin+Dagger2+MVP框架搭建(一)

Kotlin+Dagger2+MVP框架搭建(一) 项目配置 简单使用Dagger 依赖组件Component @Qualifier 和 @Named标签使用 一、项目配置 app:build.gradle文件中 apply plugin: 'kotlin-kapt' android { 、、、 } dependencies { 、、、 //dagger2依赖添加 im...

TomCat0916的博客 711

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

在kotlin的安卓项目中使用dagger

在kotlin的安卓项目中使用dagger

https://github.com/Mac-Zhu 935

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

如何用Dagger 2在Kotlin Android应用中实现依赖注入:基于PhotoAffix的完整教程

PhotoAffix 是一款用 Kotlin 编写的 Android 照片拼接应用,它将 Dagger 2 依赖注入框架运用得恰到好处:通过 1 个 AppComponent 和 5 个 Module,把图片引擎、用户偏好、协程调度器等依赖自动装配到界面层。这篇完整教程带你从核心概念到实战源码,快速掌握 Dagger 2 依赖注入的全部用法。 [![PhotoAffix Android 照片拼接

gitblog_00726的博客 971

在-Kotlin-中使用-Dagger-会遇到的陷阱和优化方法

复制代码另外,如果您使用的是 Kotlin DSL 脚本文件,那么您需要在 build.gradle.kts 文件中包含以下内容:kapt {复制代码。

xcbyaya的博客 932

dagger kotlin_Android教程第2部分:将Room与RxJava 2,Dagger 2,Kotlin和MVVM结合使用

dagger kotlinThis is the second part of the tutorial: Using Room with RxJava 2, Dagger 2, Kotlin and MVVM. 这是本教程的第二部分:将Room与RxJava 2,Dagger 2,Kotlin和MVVM一起使用。 In Part 1 we set up Gradle dependencies,...

weixin_26739079的博客 339

kotlin使用dagger2踩坑

kotlin中使用dagger2无法自动生成代码,编译报错

weixin_43837293的博客 416
上一篇: 自定义TextView控件执行时候 tv.invalidate()
下一篇: 【Kotlin中使用Dagger2】基础入门篇(二)
黄毛火烧雪下
黄毛火烧雪下 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄14年 7714粉丝 439原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄毛火烧雪下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值