使用作用域时依赖注入的顺序

2024-01-17

我目前正在尝试找出 Dagger 2。我正在尝试设置 4 个范围:App、User、Activity、Fragment。用户和活动组件是应用程序的子组件。 Fragment是一个以Activity为依赖的组件。

假设我的 UserSettingsActivity 需要一个工具栏(由 ActivityModule 提供)和一个 UserProfile(由 UserModule 提供)。在我从数据库中请求之前,我不会获得用户配置文件,而工具栏可以立即提供。因此注入的顺序是首先注入 ActivityComponent,然后注入 UserComponent。我有 2 个 @Inject 字段,一个用于工具栏,一个用于活动中的 UserProfile。我希望 dagger 知道依赖项来自不同的模块,但它似乎抱怨注入到 ActivityComponent 时无法提供 UserProfile。显然ActivityModule不能提供,但是为什么它没有连接UserModule提供的UserProfile呢?


据我所知,Dagger-2 不支持“部分注入”。

因此,当您致电myComponent.inject(this), 如果出现以下情况,Dagger-2 会抛出错误myComponent无法提供全部@Inject带注释的成员this.

我发现有两种方法可以解决此限制:

  1. Remove @Inject注释来自UserProfile, 暴露UserProfile通过公共方法UserComponent并在以下情况下手动注入UserComponent已准备好使用。与此类似的东西:userProfile = userComponent.getUserProfile()
  2. 不要做UserComponent依赖于数据获取。UserComponent可以用来注入Toolbar还有一些UserProfileProvider同时,你会获取UserProfile from UserProfileProvider当它可用时。

我个人认为第二种方法是更好的选择。应使用 DI 库来满足构造时对象的依赖性。在Android中我们无法构建Activity or Fragment我们自己,因此我们执行 DIonCreate(), onAttach(), onCreateView()等等,但这并不意味着我们应该使用 DI 库来帮助控制应用程序的流程。

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

使用作用域时依赖注入的顺序 的相关文章

  • fresco 的 Proguard 错误

    我正在使用 ProGuard 当我在发布配置中运行项目时 出现以下错误 Warning com facebook imagepipeline bitmaps DalvikBitmapFactory can t find referenced
  • 更改操作栏标题文本颜色

    我正在尝试更改 ActionBar 中标题文本的颜色 但我似乎无法让它工作 这是我尝试使用的风格 在我的应用程序主题中我使用titleTextStyle
  • 服务在后台运行?

    我正在构建的应用程序的功能之一是记录功能 我通过在服务中启动 MediaRecorder 对象来实现此目的 Intent intent new Intent v getContext RecordService class Messenge
  • Android,让文本切换器成为中心?

    如何集中我的文本切换器 我尝试过设置重力 但似乎不起作用 ts setFactory new ViewFactory public View makeView TextView t new TextView this t setTypefa
  • Android Studio磁盘空间不足如何解决?

    我随机收到此错误 并且不确定为什么 Android Studio 的磁盘空间变低 Android Studio 系统目录分区磁盘空间不足 Update 此应用程序安装在运行 10 10 1 的 Mac 上 具有 251GB 内部存储和占用
  • Android 上通过 JSCH 的基本 SSH 连接

    作为来自此的用户question https stackoverflow com questions 14323661 simple ssh connect with jsch和这个tutorial http eridem net andr
  • 注销时Firebase facebook按钮android身份验证

    我在我的 Android 应用程序中使用 firebase 并在 facebook SDK 中使用登录 我面临的唯一问题是 当我使用 facebook 登录然后注销时 facebook 登录按钮处于 注销 状态 当我单击它时 它会询问我是否
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • Android接收通知打开和取消事件

    我从 webService 接收数据以生成自定义通知 我想追踪Intent要知道open 点击 或cancel 滑动 通知上的事件 以报告服务器进行分析 有没有听众onIntentStart or onIntentCanceled 也许是通
  • 如何从debug.keystore文件获取MD5?

    我使用一些命令来获取 MD5 私钥debug keystore文件 但实际上我得到的是 SHA1 私钥而不是 MD5 我不知道如何获得MD5 这是我使用的命令 keytool list alias androiddebugkey keyst
  • 如何在不改变的情况下将字符串转换为字节?

    我需要一个解决方案将字符串转换为字节数组而不需要像这样进行更改 Input String s Test Output String s Test byte b Test 当我使用 s getBytes 那么回复是 B 428b76b8 但我
  • Android - 内容值覆盖现有行

    我正在尝试使用插入值ContentValues 我已将 5 个值插入到 5 列中 运行应用程序后 我只有最后一组值的行ContentValues 前四组未插入 ContentValues cv new ContentValues cv pu
  • 使用startActivityForResult,如何获取子活动中的requestCode?

    我有四项活动 即 A B C 和 D 我的情况是A将通过startActivityForResult启动活动B startActivityForResult new Intent this B class ONE 在另一种情况下 我将使用不
  • 对基本适配器类及其功能的疑问

    我正在尝试自定义列表视图 我使用数组列表添加对象列表 并将其发送到扩展基本适配器的类 当我扩展基本适配器类时 它实现了一些方法 例如 getView 等 在 getView 中 我将其发送到将名称 数据 分配给 XML 格式的自定义菜单的类
  • 如何在Android中隐藏应用程序标题? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想隐藏应用程序标题栏 您可以通过编程来完成 import android app Activity import android os
  • UnsupportedOperationException:特权进程中不允许使用 WebView

    我在用android sharedUserId android uid system 在我的清单中获得一些不可避免的权利 从 HDMI 输入读取安卓盒子 http eweat manufacturer globalsources com s
  • onTouch 给出奇怪的触摸点 Android

    我正在做的事情非常简单 我以前做过 但现在它没有按我的预期运行 无论如何 让我简要解释一下我正在尝试做什么以及我得到了什么 设想 我有一个RelativeLayout其中一个ImageView已放置 现在我设置touchlistener像这
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • Exif 方向标签返回 0

    我正在开发一个自定义相机应用程序 我面临以下问题 当我尝试使用检索方向时ExifInterface 它总是返回 0 ORIENTATION UNDEFINED 这使我无法将图像旋转到正确的状态 从而无法正确显示 我使用示例代码来设置相机旋转
  • RecyclerView元素更新+异步网络调用

    我有一个按预期工作的回收视图 我的布局中有一个按钮可以填充列表 该按钮应该进行异步调用 根据结果 我更改按钮的外观 这一切都发生得很好 但是 当我单击按钮并快速向下滚动列表时 异步调用的结果会更新新视图的按钮 代替旧视图的视图 我该如何处理

随机推荐

  • Excel:令人难以置信的收缩和扩展控件[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有时 我会遇到一个电子表格 其中的魔法按钮或列表框会随着时间的推移而变大或变小 代码中没有任何内容指示这一点 还有人经历过这种快乐吗 该问
  • 类型错误:无法读取未定义的属性“then”

    loginService islogged 上面的函数返回一个类似 failed 的字符串 但是 当我尝试在其上运行 then 函数时 它将返回错误 TypeError Cannot read property then of undefi
  • Fortran 2003 中的类型绑定过程重载

    我已经用 Java 编程几年了 然而 我现在正在学习一门使用 Fortran 作为示例代码 77 标准 的课程 尽管我一直将 Fortran 视为一门古老的语言 但我决定使用 gfortran 编译器尝试 2003 年标准的最新实现 以亲自
  • 在 Node.js 中使用 JSON 对象进行响应(将对象/数组转换为 JSON 字符串)

    我是后端代码的新手 我正在尝试创建一个函数来响应我的 JSON 字符串 我目前从一个例子中得到了这个 function random response console log Request handler random was calle
  • 更改回形针中的错误验证消息

    当您在回形针中设置验证消息时 例如 validates attachment presence image message gt xxxx 自定义消息会自动以字段名称作为前缀 即使它已被 message 覆盖 如何完全覆盖该消息并使其完全自
  • 如何让 PHP 使用国际化日期?

    我正在尝试让 PHP 日期能够跨语言工作 语言代码将根据登录用户的语言设置提供 我想我可以这样做 setlocale LC ALL de DE UTF 8 echo strftime A B Y 但输出是 Wednesday April 2
  • 如何获取表单提交popup.html chrome扩展的值

    我一直在尝试获取表单中用户输入的值 以传递给 chrome 扩展中的 javascript 函数 问题是我不知道如何获取用户输入 这是我的 manifest json 文件的一部分 browser action default icon a
  • 如何找到最长的回文子序列?

    问题就在这里 6 7ch6 http www cs berkeley edu vazirani algorithms chap6 pdf 来自算法书 Vazirani 与经典问题略有不同找到最长的回文 https stackoverflow
  • Python:语法错误:关键字 arg 之后非关键字

    当我运行以下代码时 def regEx1 os chdir C Users Luke Desktop myFiles files os listdir os mkdir C Users Luke Desktop FilesWithRegEx
  • Discord 机器人读取对设置消息的反应

    我让我的机器人读取所有渠道中的所有消息 然后根据只有 表情符号而没有其他内容来分配角色 常量高于所有代码 const Discord require discord js const bot new Discord Client const
  • 在没有 React.memo 的情况下使用 useCallback 有什么好处吗?

    根据我从 React 文档和网络上其他材料中了解到的 useCallback 用于通过确保将回调的记忆版本传递给子组件来避免重新渲染子组件 因此子组件的引用属性保持相同 但只有当我在子组件上使用 React memo 时 所有这些才有效 如
  • Clang、GCC 和 LTO 之间的互操作性

    我知道 Clang 和 GCC 或多或少是兼容的 C C 编译器 只要处理好架构标志 预定义和链接正确的库之类的事情 使用一个编译器创建库并将它们与另一个编译器创建的对象链接实际上非常简单 至少在 x86 上 这是一个小测试项目 正是这样做
  • 同步 XHR 弃用

    根据XHR规格 https xhr spec whatwg org async false已被弃用 现代用户代理应该开始警告甚至抛出异常 工作人员外部的同步 XMLHttpRequest 正在从 Web 平台中删除 因为它会对最终用户的体验
  • Doctests:如何抑制/忽略输出?

    以下 废话 Python 模块的 doctest 失败 gt gt gt L gt gt gt if True append to L XXX gt gt gt L 1 def append to L L append 1 class A
  • Android:getMainLooper() 和 Looper.myLooper() 之间的区别

    我现在正试图复兴一个项目 getMainLooper 出现异常 我认为MainLooper初始化可能有问题 并在此之前添加了Looper prepareMainLoop 异常告诉我该对象已经有一个循环器被抛出 然后我尝试用 Looper m
  • 正则表达式允许一组字符并禁止其他字符

    我想限制用户在字段中输入以下特殊字符 Newline Carriage return 更多内容将添加到此列表中 但我最终将获得完整的限制列表 但他可以输入某些外来字符 例如 除了字母数字字符 通常的特殊字符等之外 有没有一种简单的方法来构建
  • 如何在批处理脚本中将日期和时间插入文件名? [复制]

    这个问题在这里已经有答案了 我为 Jenkins 作业编写了一个批处理脚本 该脚本编译 net 代码 步骤之一是在提取新的编译代码之前备份当前目录 我使用这些行来提取要插入到备份文件名中的日期和时间 for F tokens 2 4 del
  • Spring @Configuration(非xml配置)用于注解驱动的任务

    谁能解释如何使用 Scheduled 注释实现任务的基本配置而不需要任何 XML 配置 我能找到的所有示例都至少使用最少的 XML 配置 例如 http blog springsource com 2010 01 05 task sched
  • 如何迭代 C++ 字符串向量?

    如何迭代这个 C 向量 vector
  • 使用作用域时依赖注入的顺序

    我目前正在尝试找出 Dagger 2 我正在尝试设置 4 个范围 App User Activity Fragment 用户和活动组件是应用程序的子组件 Fragment是一个以Activity为依赖的组件 假设我的 UserSetting