问题标签 [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.

0 投票
1 回答
1799 浏览

java - 我可以将控制反转与活动和服务等 Android 组件一起使用吗?

为了促进更清洁的测试,我想在开发我的 Android 应用程序时使用控制反转。使用普通 Java 对象看起来很简单,但是当我想用模拟数据播种我Activity的 s 和Services 时,事情开始出现问题,因为我无法将这些组件的依赖项传递给它们的构造函数。

例如,假设我想在正常使用期间Activity使用真实HttpUrlConnection的,但为了测试,我想让它使用HttpUrlConnection实际上不连接到互联网的模拟。有没有办法通过 IoC 来实现这一点Activity

我意识到有诸如工厂之类的依赖注入选项,以及诸如 Dagger 之类的库可以帮助我,但我很好奇是否还有其他方法可以实现这一点。

0 投票
2 回答
738 浏览

java - 简单的匕首单元测试失败

我是匕首新手。我创建了一个非常简单的单元测试来尝试了解我应该如何使用匕首。不幸的是它失败了。我可能还没有理解匕首的一些基本原理。

和我失败的测试课

我认为匕首会将 B 注入到 A 中,因为 A 希望将其注入,而 DaggerModule 包含一个创建 B 的 @Provides 注释方法。

更新:

我发现当我这样写模块类时

将 B 注入 A 有效。但是我不明白为什么当模块有一个提供注释的方法时它不工作,该方法构造了一个 A 的实例。在这种情况下,让注入工作的唯一方法是自己实际编写注入,如下所示:

或在 A 中创建一个接受 B 的构造函数,以便您可以编写

在 A 中需要一个接受 B 的构造函数或设置器,这正是我认为可以通过使用 Dagger 来避免的那种开销。

所以我做错了什么还是我误解了匕首的功能?

0 投票
3 回答
12432 浏览

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.

0 投票
1 回答
4008 浏览

java - 匕首自定义范围,如何?

如何使用 Dagger 创建自定义范围?

有指导方针吗?我没有找到他们。

我正在开发一个 Vaadin 应用程序,并且需要一个自定义范围。像 UiScoped 之类的东西。

此致

0 投票
1 回答
460 浏览

android - Dagger ObjectGraph 图像目录

在使用 Maven 的 Android 项目中,如何直观地查看对象图?

我已经查看了 target/ 但我似乎没有找到它。

我相信要在某处创建图像?这是正确的吗?

顺便说一句,这是一个安卓项目。

0 投票
1 回答
2827 浏览

android - Dagger 活动图和分离的模块

我有一个 Android 应用程序,我正在尝试使用匕首。我决定使用全局图 + 活动图。我有三个模块:

安卓模块

我的应用模块

活动模块

我不得不MyAppModule对. ActivityModule_ Context_ActivityContext

图表配置是否正确?我将模块添加到图中Application和 a 中BaseActivity,我认为这就足够了,我不需要包含,但我不确定我是否完全理解它的配置过程。

编辑

像这样,匕首没有错误,但如果我尝试注入一个Activity Context,在运行时它是null.

0 投票
2 回答
1486 浏览

android - 使用 Volley 和 Dagger 获取 Robolectric ShadowApplication 时的 NPE

在我的 Android 应用程序中,我设置了 Volley。

Robolectric.application 已初始化,所有其他测试运行顺利。尝试获取模拟的 HTTP 响应时出现此错误。

这是我的测试:

这是我得到的错误:

0 投票
1 回答
717 浏览

android - Robolectric、Dagger 和编译时 $ModuleAdapter 创建

继我的 Android TDD 系列中的其他 问题之后,我已经设法使用RobolectricMockitoMavenABS对我的 Android 开发进行单元测试。显然,我似乎在突破自己的知识界限,但 Android CI 的梦想实在是太诱人了。如果您能帮助解决我的下一个问题,我将不胜感激,就在这里;

我想编写一个集成测试用例,它将我的应用程序数据库从 v1 带到 head。我正在使用Dagger进行 DI 并促进这个非标准的 JUnit 测试,我将执行升级所需的类注入到我的测试中,因此;

需要注意的重点;

  • 该测试位于它自己的测试项目下,与被测项目分开(有关结构,请参阅我的链接问题)
  • 创建实际应用程序的模块图时出现故障(下面的堆栈跟踪)。
  • 注入器规则(如下所述)链接到测试项目模块,其中包括在实际运行我的应用程序时使用的模块。

规则下发生了DaggerInjector什么?

我尝试注入测试所需的任何依赖项。

你的测试模块是什么样的?

为测试和(未来)测试模拟替换添加入口点(这是dagger-0.9.1,不是最新的 where injectreplaces )。entryPoints

如果我注释掉负责创建我的真实应用程序对象图的代码行,我的测试就会运行绿色。这是堆栈跟踪;

错误1:从我的测试角度被抓到并吞下

dagger.internal.RuntimeAggregatingPlugin#getModuleAdapter

错误 2:被Robolectric转储到控制台

调查至今

我一直专注于为什么会发生“错误 1”。从阅读“编译时代码生成”方面到用户指南,我可以看到 RuntimeAggregatingPlugin 正在寻找的适配器 ( OceanLifeModule$ModuleAdapter) 是在编译时生成的。从那以后,我一直在检查我的 Maven 配置,如果社区认为有必要解决这个问题,我很乐意提供。“错误 2”的低级性质使我认为它比根本原因更具衍生性。

0 投票
1 回答
2942 浏览

android - 在 Robolectric 测试中覆盖 Dagger 模块

我正在开发一个Android应用程序,并且一直在使用Dagger依赖注入。

我现在正在尝试测试具有这些依赖项之一的片段,我们称之为ProductsService.

在我的Robolectric测试中,我已经获得了一个覆盖的测试模块ProductsService

在我的测试中,为了运行我的片段,我按如下方式构建它(如此处所示如何使用 Robolectric 测试片段?

问题是,在此创建过程中,它会调用Dagger以满足其依赖关系:

如何覆盖创建片段时创建的对象图,以使用MockProductsModule我在测试中声明的?

0 投票
1 回答
852 浏览

dependency-injection - Dagger:代码生成还是反射?

我如何知道 Dagger 的代码生成是否正常工作?我看到几个线程,用户最终发现正在使用反射。

我已经在 Eclipse 中运行了示例咖啡机应用程序,当我在例如 Thermosiphon 中设置断点时,我在堆栈中看不到任何生成的类。我确实看到了 ReflectiveAtInjectBinding,这让我怀疑我的设置不正确。