问题标签 [dagger]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 我可以将控制反转与活动和服务等 Android 组件一起使用吗?
为了促进更清洁的测试,我想在开发我的 Android 应用程序时使用控制反转。使用普通 Java 对象看起来很简单,但是当我想用模拟数据播种我Activity
的 s 和Service
s 时,事情开始出现问题,因为我无法将这些组件的依赖项传递给它们的构造函数。
例如,假设我想在正常使用期间Activity
使用真实HttpUrlConnection
的,但为了测试,我想让它使用HttpUrlConnection
实际上不连接到互联网的模拟。有没有办法通过 IoC 来实现这一点Activity
?
我意识到有诸如工厂之类的依赖注入选项,以及诸如 Dagger 之类的库可以帮助我,但我很好奇是否还有其他方法可以实现这一点。
java - 简单的匕首单元测试失败
我是匕首新手。我创建了一个非常简单的单元测试来尝试了解我应该如何使用匕首。不幸的是它失败了。我可能还没有理解匕首的一些基本原理。
和我失败的测试课
我认为匕首会将 B 注入到 A 中,因为 A 希望将其注入,而 DaggerModule 包含一个创建 B 的 @Provides 注释方法。
更新:
我发现当我这样写模块类时
将 B 注入 A 有效。但是我不明白为什么当模块有一个提供注释的方法时它不工作,该方法构造了一个 A 的实例。在这种情况下,让注入工作的唯一方法是自己实际编写注入,如下所示:
或在 A 中创建一个接受 B 的构造函数,以便您可以编写
在 A 中需要一个接受 B 的构造函数或设置器,这正是我认为可以通过使用 Dagger 来避免的那种开销。
所以我做错了什么还是我误解了匕首的功能?
android - Android Dagger Dependency Injection fails on private Fields
I'm new to dagger (though I have experience with DI from working on Java EE WebApps using Weld).
What I'm trying to do is to inject a dependency into a class. The field is private.
Dagger then throws an exception stating it can't inject into a private field.
What's the reason for that?
After all it is possible to write to private fields using reflections, even on android..
If I set the visibility of the field to something other than private the injection seems to work.
java - 匕首自定义范围,如何?
如何使用 Dagger 创建自定义范围?
有指导方针吗?我没有找到他们。
我正在开发一个 Vaadin 应用程序,并且需要一个自定义范围。像 UiScoped 之类的东西。
此致
android - Dagger ObjectGraph 图像目录
在使用 Maven 的 Android 项目中,如何直观地查看对象图?
我已经查看了 target/ 但我似乎没有找到它。
我相信要在某处创建图像?这是正确的吗?
顺便说一句,这是一个安卓项目。
android - Dagger 活动图和分离的模块
我有一个 Android 应用程序,我正在尝试使用匕首。我决定使用全局图 + 活动图。我有三个模块:
安卓模块
我的应用模块
活动模块
我不得不MyAppModule
对. ActivityModule
_ Context
_Activity
Context
图表配置是否正确?我将模块添加到图中Application
和 a 中BaseActivity
,我认为这就足够了,我不需要包含,但我不确定我是否完全理解它的配置过程。
编辑
像这样,匕首没有错误,但如果我尝试注入一个Activity
Context
,在运行时它是null
.
android - 使用 Volley 和 Dagger 获取 Robolectric ShadowApplication 时的 NPE
在我的 Android 应用程序中,我设置了 Volley。
Robolectric.application 已初始化,所有其他测试运行顺利。尝试获取模拟的 HTTP 响应时出现此错误。
这是我的测试:
这是我得到的错误:
android - Robolectric、Dagger 和编译时 $ModuleAdapter 创建
继我的 Android TDD 系列中的其他 问题之后,我已经设法使用Robolectric、Mockito、Maven和ABS对我的 Android 开发进行单元测试。显然,我似乎在突破自己的知识界限,但 Android CI 的梦想实在是太诱人了。如果您能帮助解决我的下一个问题,我将不胜感激,就在这里;
我想编写一个集成测试用例,它将我的应用程序数据库从 v1 带到 head。我正在使用Dagger进行 DI 并促进这个非标准的 JUnit 测试,我将执行升级所需的类注入到我的测试中,因此;
需要注意的重点;
- 该测试位于它自己的测试项目下,与被测项目分开(有关结构,请参阅我的链接问题)
- 创建实际应用程序的模块图时出现故障(下面的堆栈跟踪)。
- 注入器规则(如下所述)链接到测试项目模块,其中包括在实际运行我的应用程序时使用的模块。
规则下发生了DaggerInjector
什么?
我尝试注入测试所需的任何依赖项。
你的测试模块是什么样的?
为测试和(未来)测试模拟替换添加入口点(这是dagger-0.9.1
,不是最新的 where inject
replaces )。entryPoints
如果我注释掉负责创建我的真实应用程序对象图的代码行,我的测试就会运行绿色。这是堆栈跟踪;
错误1:从我的测试角度被抓到并吞下
dagger.internal.RuntimeAggregatingPlugin#getModuleAdapter
错误 2:被Robolectric转储到控制台
调查至今
我一直专注于为什么会发生“错误 1”。从阅读“编译时代码生成”方面到用户指南,我可以看到 RuntimeAggregatingPlugin 正在寻找的适配器 ( OceanLifeModule$ModuleAdapter
) 是在编译时生成的。从那以后,我一直在检查我的 Maven 配置,如果社区认为有必要解决这个问题,我很乐意提供。“错误 2”的低级性质使我认为它比根本原因更具衍生性。
android - 在 Robolectric 测试中覆盖 Dagger 模块
我正在开发一个Android
应用程序,并且一直在使用Dagger
依赖注入。
我现在正在尝试测试具有这些依赖项之一的片段,我们称之为ProductsService
.
在我的Robolectric
测试中,我已经获得了一个覆盖的测试模块ProductsService
:
在我的测试中,为了运行我的片段,我按如下方式构建它(如此处所示如何使用 Robolectric 测试片段?)
问题是,在此创建过程中,它会调用Dagger
以满足其依赖关系:
如何覆盖创建片段时创建的对象图,以使用MockProductsModule
我在测试中声明的?
dependency-injection - Dagger:代码生成还是反射?
我如何知道 Dagger 的代码生成是否正常工作?我看到几个线程,用户最终发现正在使用反射。
我已经在 Eclipse 中运行了示例咖啡机应用程序,当我在例如 Thermosiphon 中设置断点时,我在堆栈中看不到任何生成的类。我确实看到了 ReflectiveAtInjectBinding,这让我怀疑我的设置不正确。