Dagger2 设计模式之构建者模式

2023-11-08

Dagger 中的设计模式分析

Builder 模式

DaggerFatherComponent 对象的构建

Dagger 中对 DaggerFatherComponent 对象的构建可以拆分成三部分:

一 构建使用 @Inject 注解构造函数的对象

如:

this.provideCarProvider = FatherModule_ProvideCarFactory.create(builder.fatherModule);
二 构建 FatherComponent 所对应的 FatherModule.class 中提供的依赖对象
  1. 对于 FatherModule.class 中提供的所有依赖对象,Dagger 都会生成一个相应的工厂类,可以使用该该工厂类来获取依赖

如:

this.provideCarProvider = FatherModule_ProvideCarFactory.create(builder.fatherModule);
三 构建存在依赖或者继承关系的依赖对象
  1. FatherComponent 除了可以使用 FatherModule.class 中提供的依赖对象,还可以使用通过依赖或者继承其他Component的依赖。

    • 对于继承(SubComponent)
      Dagger 在构建 FatherComponent 时,同时会构建一个 sonComponentBuilderProvider 对象,该对象主要用来
      构建 sonComponent 对象。即在继承关系中,子 Component 是需要父 Component 来构建的。在构建 子 Component 过程中,父 Component 会将其
      所有依赖都传给 子 Component。

    • 对于依赖(Dependent)

    假设 SonComponent 依赖 FatherComponent,我们在构建 SonComponent 时需要传入一个 fatherComponent 对象,表明 SonComponent 中需要使用
    FatherComponent 的一些依赖。而在 FatherComponent 通过接口的形式暴露了 SonComponent 中可以使用的依赖。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dagger2 设计模式之构建者模式 的相关文章

  • 如何为ScrollView放置固定图像背景?

    我应该想要滚动视图滚动 而不是背景中的图像 将图像添加到滚动视图框架之前的视图层次结构的较高位置
  • 找不到参数的方法 dependencyResolutionManagement()

    我正在尝试使用老师给我的一个项目 但它显示了一个错误 Settings file Users admin AndroidStudioProjects HTTPNetworking settings gradle line 1 A probl
  • Android Studio 3.0 Canary 9 - 无法解析包

    我在 Android Studio 3 0 Canary 9 中遇到几个错误 这些错误是 无法解析 android 软件包 下面列出了一些错误 我刚刚安装了 SDK 的所有额外软件包 但仍然收到 gradle 构建错误 Error 82 1
  • 使用workmanager时Firestore脱机持久性错误

    我正在使用一个WorkManger定期从我的中检索信息Firestore当应用程序处于后台和前台时的数据库 此信息用于根据状态更新 UI 因此不同的状态会添加或删除 UI 的不同部分 第一次运行时效果很好 但是 一旦应用程序处于后台并且Wo
  • 类型容器“Android 依赖项”引用不存在的库 android-support-v7-appcompat/bin/android-support-v7-appcompat.jar

    我在尝试在我的项目中使用 Action Bar Compat 支持库时遇到了某种错误 我不知道出了什么问题 因为我已按照此链接中的说明进行操作 gt http developer android com tools support libr
  • 如何重试已消耗的 Observable?

    我正在尝试重新执行失败的已定义可观察对象 一起使用 Retrofit2 和 RxJava2 我想在单击按钮时重试特定请求及其订阅和行为 那可能吗 service excecuteLoginService url tokenModel Ret
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • 如何以编程方式检查 AndroidManifest.xml 中是否声明了服务?

    我正在编写一个库 该库提供了一项服务 其他开发人员可以通过将其包含在他们的项目中来使用该服务 因此 我无法控制 AndroidManifest xml 我在文档中解释了要做什么 但一个常见的问题是人们忽略了将适当的 标记添加到其清单中 或者
  • Android SIP 来电使用带有广播接收器的服务

    大家好 其实我正在尝试创建一个应用程序 支持基于 SIP 通过互联网进行音频呼叫 这里使用本机 sip 我遇到了来电问题 我已经完成了服务的注册部分 但是在接听电话时我无法接听电话 请帮助我 Service file package exa
  • 如何使用 Cordova 获取当前安装的应用程序的版本?

    我已经找到了应用程序可用性插件 https github com ohh2ahh AppAvailability它主要检查用户是否在其设备上安装了某个应用程序 是否有可能获得应用程序的当前版本 开发者名称 重要 以及所有可能的信息 一般来说
  • 尝试将相机切换回前面但出现异常

    尝试将相机切换回前面 但出现异常 找不到 问题请检查并帮助 error 01 27 11 49 00 376 E AndroidRuntime 30767 java lang RuntimeException Unable to start
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Ubuntu 16.04 - Genymotion:找不到 /dev/hw_random

    I install Genymotion on the Ubuntu 16 04 64Bit I created a virtual emulator for Android 6 0 then I run this emulator but
  • 尝试在 ubuntu 中编译 android 内核时出错

    我正在尝试从源代码编译 Android 内核 并且我已经下载了所有正确的软件包来执行此操作 但由于某种原因我收到此错误 arm linux androideabi gcc error unrecognized command line op
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 一次显示两条Toast消息?

    我希望在一个位置显示一条 Toast 消息 并在另一位置同时显示另一条 Toast 消息 多个 Toast 消息似乎总是按顺序排队和显示 是否可以同时显示两条消息 是否有一种解决方法至少可以提供这种外观并且不涉及扰乱活动布局 Edit 看来

随机推荐

  • Profiling Top Kagglers: Bestfitting, Currently #1 in the World

    We have a new 1 on our leaderboard a competitor who surprisingly joined the platform just two years ago Shubin Dai bette
  • 研究下DFD

    数据流图 简称DFD 是SA方法中用于表示系统逻辑模型的一种工具 它以图形的方式描绘数据在系统中流动和处理的过程 由于它只反映系统必须完成的逻辑功能 所以它是一种功能模型 下图是一个飞机机票预订系统的数据流图 它反映的功能是 旅行社把预订机
  • JAVA学习------打印多种星星矩阵

    打印一个10 10的星星矩阵 package step1 public class ForPractice1 public static void test start for int i 1 i lt 10 i for int j 1 j
  • [网络安全提高篇] 一一六.恶意代码同源分析及BinDiff软件基础用法

    网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但我也试试 看看自己未来四年究竟能
  • warning: remember to run ‘libtool --finish /usr/local/1/php-7.4.29/libs

    ubuntu上php7 4 33编译安装完成后警告报错 如下所示 usr local apache2 apr build 1 libtool finish usr local soft php 7 4 33 libs vim etc ld
  • C++:打印大写字母对应的ASCII码

    题目描述 输出26个大写字母对应的ASCII码 每输出 个ASCII码换一行再输出下一行 输入 输出 输出 个十进制整数 即对应大写字母的ASCII码 输出格式见样例 样例输入 Copy 样例输出 Copy 65 66 67 68 69 7
  • Docker学习进阶篇

    学自狂神 视频地址 https www bilibili com video BV1kv411q7Qc share source copy web 目标 掌握 docker基础 原理 网络 服务 集群 错误排查 日志 linux docke
  • java处理时间字符串2021-08-04T16:00:00.000Z

    背景 业务中收到了字符串2021 08 04T16 00 00 000Z 也有可能是2021 08 05 或者2021 08 05 12 00 00由于不确定性 需要手动转换时间 直接上代码 public static String int
  • 在webpack中使用monaco-editor

    目录 前言 使用 自己总结的使用过程 1 安装 2 在页面中使用 3 开启辅助功能 4 如何设置菜单中文显示效果 5 编辑器功能 6 monaco editor使用到的JS文件如何压缩 2020年4月28日11 49 58 前言 我查过网上
  • ROS中多个工作空间同时工作

    ROS开发中 有时需要建多个工作空间 将不同的功能包区别开来 但是 多个工作空间会存在相互影响的情况 如何让它们能同时工作且相互不影响 需要技巧 这里需要清楚ROS工作空间的工作原理 本文做个详细介绍 1 ROS PACKAGE PATH环
  • 汽配企业如何把MES管理系统的价值利用到最大化

    随着信息技术的快速发展 越来越多的汽配企业开始引入MES生产管理系统 以提高生产效率 优化资源利用和提升产品质量 然而 要想实现MES系统的最大化价值 汽配企业需要从以下几个方面入手 首先 汽配企业应该充分了解MES系统的功能和特点 并根据
  • git笔记

    git笔记 第一次使用配置 git config global user email you example com git config global user name Your Name 生成ssh key ssh keygen t
  • Matplotlib Intermediate Styling with cycler

    Styling with cycler 自定义属性循环设置的演示以控制多个 line 的图的颜色和其他样式属性 这个例子演示了两种不同的 API 设置 rc 参数 指定默认属性循环 这会影响所有随后的 axes 不会影响已经创建的 axes
  • 论文笔记:Learning Transferable Visual Models From Natural Language Supervision(CLIP)

    1 Intro 目前最先进的CV模型 大部分是现有一个定义好的类别的集合 然后模型通过预测这些提前定义好的类别 从而完成模型的训练 这些提前定义好的类别会大大简化问题本身 但采用了这种有限制性的监督信号 也大大限制了模型的泛化性 尤其是识别
  • 详解Python的切片(Slice)

    先看例子 array 0 1 2 3 4 5 print array print array 1 print array 2 print array 4 1 print array 4 5 print array 10 3 结果是 0 1
  • Ubuntu 12.04 搭建Android开发环境

    Ubuntu 12 04 搭建Android开发环境 2013 7 29 Linux环境下搭建Android开发环境 大部分开发人员可能都在Windows下做开发 可能是感觉在Windows下比较方便 我感觉也是 不过作为一名开发者仅局限在
  • R语言内置颜色色板+生成代码

    R语言内置颜色参照色板 日常使用中 想用一些R语言内置颜色 网上始终没有找到相对齐全的内置色板 于是自己写了一个 R语言内置颜色总共657种 文中代码共生成560种颜色 去掉了部分Grey渐变色 代码如下 RColors 568 col l
  • spring文件上传大小限制,Springboot大于一1G文件上传

    前言 一 SpringMVC简介 1 1 SpringMVC引言 为了使Spring有可插入的MVC架构 SpringFrameWork在Spring基础上开发SpringMVC框架 从而在使用Spring进行WEB开发时可以选择使用Spr
  • 宋浩线性代数笔记(六)二次型

    本章的内容比较少且均通俗易懂 较第三章和第五章容易许多 之后还有针对于数学一的第7更 数二数三的选手已经可以完结撒花
  • Dagger2 设计模式之构建者模式

    Dagger 中的设计模式分析 Builder 模式 DaggerFatherComponent 对象的构建 Dagger 中对 DaggerFatherComponent 对象的构建可以拆分成三部分 一 构建使用 Inject 注解构造函