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

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

目录

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)

有些实例类型,我无法掌控

别慌!@Module来帮忙

两种情况

  1. 你要注入的实例的类型就不是你自己写的类,无法使用@inject
  2. 你要注入的实例的类型就是你自己写的类,但是带了一个参数,这个参数类型的类不是你自己写的,无法使用@inject

1. MainModule

@Module
class MainModule{
    @Provides
    fun provideString():String{
        return  "我是String,你能在我的构造方法上加@inject吗?是的,你不能!"
    }
}

2. MainPresenter

class MainPresenter @Inject constructor(var name:String) {

    fun doSomething():String{
        return "This is result$name"
    }
}

3. MainComponent

@Component(modules = [MainModule::class])
interface MainComponent {
    fun inject(activity: MainActivity)
}

4. MainActivity

class MainActivity : Activity() {

    @Inject
    lateinit var value:String
    @Inject
    lateinit var presenter: MainPresenter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)
        DaggerMainComponent.builder().build().inject(this)
       // mPresenter.doSomething()
        Toast.makeText(this,presenter.doSomething(),Toast.LENGTH_SHORT).show()
        Toast.makeText(this,value,Toast.LENGTH_SHORT).show()
    }
}

1.1 MainModule_ProvideStringFactory

public final class MainModule_ProvideStringFactory implements Factory<String> {
  private final MainModule module;

  public MainModule_ProvideStringFactory(MainModule module) {
    this.module = module;
  }

  @Override
  public String get() {
    return provideString(module);
  }

  public static MainModule_ProvideStringFactory create(MainModule module) {
    return new MainModule_ProvideStringFactory(module);
  }

  public static String provideString(MainModule instance) {
    return Preconditions.checkNotNullFromProvides(instance.provideString());
  }
}

2.1 MainPresenter_Factory 

public final class MainPresenter_Factory implements Factory<MainPresenter> {
  private final Provider<String> nameProvider;

  public MainPresenter_Factory(Provider<String> nameProvider) {
    this.nameProvider = nameProvider;
  }

  @Override
  public MainPresenter get() {
    return newInstance(nameProvider.get());
  }

  public static MainPresenter_Factory create(Provider<String> nameProvider) {
    return new MainPresenter_Factory(nameProvider);
  }

  public static MainPresenter newInstance(String name) {
    return new MainPresenter(name);
  }
}

3.1 DaggerMainComponent 

public final class DaggerMainComponent implements MainComponent {
  private final MainModule mainModule;

  private DaggerMainComponent(MainModule mainModuleParam) {
    this.mainModule = mainModuleParam;
  }

  public static Builder builder() {
    return new Builder();
  }

  public static MainComponent create() {
    return new Builder().build();
  }

  private MainPresenter mainPresenter() {
    return new MainPresenter(MainModule_ProvideStringFactory.provideString(mainModule));
  }

  @Override
  public void inject(MainActivity activity) {
    injectMainActivity(activity);
  }

  private MainActivity injectMainActivity(MainActivity instance) {
    MainActivity_MembersInjector.injectValue(instance, MainModule_ProvideStringFactory.provideString(mainModule));
    MainActivity_MembersInjector.injectPresenter(instance, mainPresenter());
    return instance;
  }

  public static final class Builder {
    private MainModule mainModule;

    private Builder() {
    }

    public Builder mainModule(MainModule mainModule) {
      this.mainModule = Preconditions.checkNotNull(mainModule);
      return this;
    }

    public MainComponent build() {
      if (mainModule == null) {
        this.mainModule = new MainModule();
      }
      return new DaggerMainComponent(mainModule);
    }
  }
}

4.1 MainActivity_MembersInjector

public final class MainActivity_MembersInjector implements MembersInjector<MainActivity> {
  private final Provider<String> valueProvider;

  private final Provider<MainPresenter> presenterProvider;

  public MainActivity_MembersInjector(Provider<String> valueProvider,
      Provider<MainPresenter> presenterProvider) {
    this.valueProvider = valueProvider;
    this.presenterProvider = presenterProvider;
  }

  public static MembersInjector<MainActivity> create(Provider<String> valueProvider,
      Provider<MainPresenter> presenterProvider) {
    return new MainActivity_MembersInjector(valueProvider, presenterProvider);
  }

  @Override
  public void injectMembers(MainActivity instance) {
    injectValue(instance, valueProvider.get());
    injectPresenter(instance, presenterProvider.get());
  }

  @InjectedFieldSignature("com.example.myapplication.MainActivity.value")
  public static void injectValue(MainActivity instance, String value) {
    instance.value = value;
  }

  @InjectedFieldSignature("com.example.myapplication.MainActivity.presenter")
  public static void injectPresenter(MainActivity instance, MainPresenter presenter) {
    instance.presenter = presenter;
  }
}

 

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

相关推荐

kotlin的dagger hilt依赖注入

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

qq_44016573的博客 1957

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的博客 2385

ODrive0.5.5源码分析(1) ADC的处理

odrive 0.5.5 ADC

danger的博客 4307

最新Docker GPU支持全解析:为什么nvidia-smi能用但PyTorch找不到CUDA?

本文深入解析了Docker容器中nvidia-smi命令可用但PyTorch无法调用CUDA的根本原因。关键在于默认配置仅暴露了GPU的utility管理能力,而CUDA计算所需的compute能力未被激活。通过正确设置NVIDIA_DRIVER_CAPABILITIES环境变量为compute,utility,并配合--gpus参数,即可解决此问题,确保AI训练等任务顺利进行。

convnet3designer的博客 239

Kotlin 40. Dependency Injection 依赖注入以及Hilt在Kotlin中的使用,系列3:Hilt 注释介绍及使用案例

此系列博客中,我们将主要介绍: - `Dependency Injection`(依赖注入) 概念介绍。网上看了许多关于 DI 的介绍,云里雾里。这里,我们通过通俗易懂地方式对其进行介绍。 - 手动依赖注入介绍。为了让大家更容易理解 Hilt,我们先介绍如何通过手动的方式实现依赖注入效果。 - Hilt 注释(annotations)介绍及使用案例 - MVVM 案例中如何使用 Hilt 此博客基于一个非常简单的 Kotlin 项目来解释 Hilt 的使用方式。

破浪会有时的博客 1667

AI辅助SCI论文大修:一键生成回复信+同步修改稿,效率提升300%

AI可以针对多位审稿人的意见进行逐点(point-by-point)回复,语言地道流畅,能够处理邮件格式、礼貌性回复和部分内容修正。最新的LLM:GPT-5, Claude 4.1都是带有agentic功能,能规划复杂任务,并调用工具执行复杂任务的大模型。有时候审稿人意思模棱两可,你的反复揣摩ta关注的点是什么,回复的不好,很有可能下一轮被reject。这个2.0升级版,除了在response中完美rebuttle,在文中对应部分的修改,也会帮你一并呈现,基本上就是可以直接拿来用的版本;

dinaxuejie的博客 1664

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

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

u010194271的博客 1424

uniapp [安卓苹果App端] - 实现集成微信一键登录及授权获取用户信息全流程源码,uniApp唤起微信客户端app实现微信授权头像昵称手机号(提供移动应用/开放平台/资质认证/签名/权限申请

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,微信一键登录,uniapp项目App端实现微信登录,Uniapp实现微信授权登录,调起微信客户端授权用户信息,uniappapp端微信一键登录打开手机微信app,app端如何唤起用户本机微信应用并授权登陆,如何申请微信一键登录,uniapp实现APP微信登录流程,打开本地微信软件,接入微信登录,UniApp实现微信登录教程,获取头像昵称手机号用户数据,超详细实现微信登录功能,唤起没反应,授权失败,获取

🏆 前端领域优质创作者 1万+

2026年03月CCF-GESP编程能力等级认证C++编程一级真题解析

本文收录于专栏《。订阅后可阅读专栏内所有文章。

人生就是一个不断学习的过程 337

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

手撕Lua字节码:从黑盒到透明

lua 字节码 怎么‘手撕’一个 chunk 看看里面啥样?我手里有一个.luac或出来的二进制字节码,想知道里面到底是什么结构、哪些字段、有哪些指令,怎么一步一步“拆箱”,从一个黑盒变成有迹可循的东西?也就是:不满足于只会loadpcall而是想亲眼看看一个 chunk 内部长啥样,甚至写点工具把它解析出来。这篇就用带你从“拿到一坨.luac不搞高深玄学,尽量让你看完就能自己动手。注:以 Lua 5.3/5.4 为主,细节各版本略有不同,但大体套路是一致的。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 99

Kotlin MVP with Dagger2: 深入实战教程

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

gitblog_00468的博客 700

Android Input——输入事件ANR执行(十六)

上一篇文章我们介绍了输入事件 ANR 的触发流程,这里我们再来看一下输入事件 ANR的执行流程。

小旭的专栏 944

数据处理和分析之数据聚类:层次聚类(Hierarchical Clustering):单链接层次聚类方法

单链接层次聚类(Single-Linkage Hierarchical Clustering)是凝聚型层次聚类的一种,它基于数据点之间的最小距离来定义聚类间的相似性。在单链接层次聚类中,两个聚类之间的距离定义为这两个聚类中任意两个数据点之间的最短距离。这种聚类方法倾向于形成链状或线性的聚类,因为聚类的边界是由最远的数据点决定的,而不是聚类的平均或中心位置。单链接层次聚类通过计算簇间最近点的距离来决定簇的合并,这种方法简单直观,但可能导致簇的形状不规则,尤其是在数据点分布不均匀的情况下。

2401_87715305的博客 1443

MVP + Dagger2 + Kotlin 随笔

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

lilie008的专栏 369

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

在kotlin的安卓项目中使用dagger

在kotlin的安卓项目中使用dagger

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

gitblog_00726的博客 971

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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-中使用-Dagger-会遇到的陷阱和优化方法

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

xcbyaya的博客 932

Dagger2 Kotlin版 基础讲解(一)

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

fayangzhou的博客 809

Dagger2完全解析(二),进阶使用

Dagger 2 进阶使用 Dagger 2 完全解析(一),基本使用与原理 Dagger 2 完全解析(二), 进阶使用 本系列文章是基于 Google Dagger 2.23.2 版本, Kotlin 1.3.21版本 在Dagger 2 完全解析(一),基本使用与原理中介绍了 Dagger 2 基本使用,但是在实战中基本使用是远远不够的,我们还需要掌握一些其它的知识,下面由简入繁地讲...

xiaowu 专栏 1063

kotlin使用dagger2踩坑

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

weixin_43837293的博客 416

Kotlin MVP Dagger2 项目教程

Kotlin MVP Dagger2 项目教程 1. 项目的目录结构及介绍 kotlin-mvp-dagger2/ ├── app/ │ ├── build.gradle │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ ├── com/ │ │ │ │ │ ├── ogulcan/ │...

gitblog_00265的博客 772

Android 使用kotlin Retrofit2 + Dagger2完成网络请求跟依赖注入组合使用

Android 使用kotlin Retrofit2 + Dagger2完成网络请求跟依赖注入组合使用

qq_44023485的博客 1695
上一篇: 【Kotlin中使用Dagger2】基础入门篇(一)
下一篇: Kotlin学习笔记-属性与字段详解
黄毛火烧雪下
黄毛火烧雪下 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄14年 7714粉丝 439原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

黄毛火烧雪下

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

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

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

打赏作者

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

抵扣说明:

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

余额充值