问题标签 [dagger-2]

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 回答
4642 浏览

android - 使用 Dagger2 时创建测试依赖项

在阅读 dagger 2 的文档时,我找不到在构建测试应用程序时提供依赖项的简单方法。我发现的唯一线索是:

Dagger 2 不支持覆盖。覆盖简单测试伪造的模块可以创建模块的子类来模拟该行为。应该分解使用覆盖并依赖依赖注入的模块,以便将覆盖的模块表示为两个模块之间的选择。

我不明白如何在 Android 上设置这样的配置,谁能解释一下?

0 投票
5 回答
23181 浏览

java - 使用 Dagger 2 进行 Android 单元测试

我有一个使用 Dagger 2 进行依赖注入的 Android 应用程序。我还在使用最新的 gradle 构建工具,它允许构建变体用于单元测试和一个用于仪器测试。我java.util.Random在我的应用程序中使用,我想模拟它进行测试。我正在测试的类不使用任何 Android 的东西,所以它们只是普通的 java 类。

在我的主要代码中,我Component在扩展类的类中定义了 a Application,但在单元测试中我没有使用Application. 我尝试定义一个测试Moduleand Component,但 Dagger 不会生成Component. 我也尝试过使用Component我在我的应用程序中定义的并Module在构建它时交换它,但是应用程序Component没有inject我的测试类的方法。如何提供Random用于测试的模拟实现?

这是一些示例代码:

应用:

模块:

测试的基类:

或者:

测试模块:

0 投票
1 回答
6769 浏览

android - Dagger 2 基类注入

在 Dagger 1 中,我有一个基类设置,它可以处理创建范围图并将依赖项注入当前对象。例如...

这允许每个子类在标准应用程序模块之外补充他们自己的模块集。

在玩过 Dagger 2 之后,似乎无法处理类似的情况......

我通过修改 MyBaseActivityComponent 来解决上述问题,以便列出它可能使用的所有可能模块......

所以现在我可以做这样的事情......

但是现在我遇到了一个问题,注入将注入 MyBaseActivity 的依赖项,而不是它的子类。建议?

0 投票
3 回答
2765 浏览

java - 匕首2循环依赖

在我正在处理的一个项目中,我有 2 个高度相互依赖的类:

这个想法是,当执行一项工作时,该工作可以访问多个服务 - 其中一个是执行者本身,因此一个工作将能够执行子工作。

可以看出,这里有一个循环依赖,但我发现它很难打破。

主要问题是 WorkExecutor 在构建图时实际上不需要 ExecutionServices 对象的实例,而只需要稍后使用的提供程序。遗憾的是,Dagger 不知道 WorkExecutor 不会从类的构造函数中调用 ExecutionServices 提供程序,因此它猜测 ExecutionServices 依赖于 WorkExecutor,反之亦然。

我发现的一种可能的解决方案是通过以下方式定义模块和组件:

然后我将原始类修改为:

然后为了创建我的应用程序,我必须这样做:

但我不确定这是正确的做法 - 有没有更好的方法?

0 投票
2 回答
748 浏览

android - 如何在方法中注入依赖项?

我是依赖注入的初学者。特别是 Dagger 2。我试图弄清楚我是否/如何做这样的事情:

还是我需要将该依赖项作为类变量放入?对此的任何帮助将不胜感激。同样在这种情况下,变量 someInteger 不是依赖项,而是由调用者添加......这有关系吗?

我可以这样称呼它吗:

android studio 不喜欢上面的调用方法(我假设是因为我做错了什么)

0 投票
1 回答
559 浏览

android - Do Dagger 2 and Android Annotations work together?

I've read here that Android Annotations has been updated to work with Dagger (1), but I am not sure if it automatically applies to Dagger 2 as well.

Does anybody use AA and Dagger 2 together?

Thanks.

0 投票
4 回答
3072 浏览

java - 匕首 2 线程中的 @Singleton 是否安全?

我正在尝试将我的应用程序中的所有内容从单例中移开,因为我已经意识到这是一种糟糕的编程习惯,也就是说,我正在研究实现 Dagger 2 依赖注入。而且我想知道,当您在 Dagger 2 中执行 @Singleton 时,该线程是否已同步?如果不是,我怎么能同步它,所以我不会从多个线程接触相同的东西中得到任何奇怪的数据异常。

当我在做这样的事情之前创建单例时:

就同​​步而言,Dagger 2 @Singleton 是否等效?

0 投票
6 回答
66296 浏览

android - Dagger 2 错误:依赖“不能在没有 @Inject 构造函数的情况下提供”,而它实际上是用 @Inject 注释的

我已经开始使用 Dagger 2 并遇到了一个奇怪的问题,这对我来说似乎是一个错误。

我有 3 个模块,它们组成一个子组件,而子组件又扩展/加上更高级别的组件。

子组件非常简单:只是模块和单个注入点的组合:

第一个模块看起来像这样 - 它提供了一般的片段级依赖项:

第二个模块如下所示 - 它为屏幕上的 UI 子集提供演示者/控制器及其依赖项:

第三个模块 - UI 子集的另一个演示者/控制器:

正在注入的片段的相关部分:

NavigationListControllerImpl实现以下构造函数:

我从 Dagger 2 编译器得到的错误如下:

错误抱怨缺少 @Inject-annotated 构造函数,但它存在!@Provides如果我用显式(with )替换隐式 NavigationListControllerImpl 实例创建(通过-method 参数传递new),dagger 开始抱怨相同的错误,但现在是相同模块中的第二个条目的演示者对象,依此类推。

所有这些情况看起来都很奇怪,我想听听更有经验的 Dagger 2 用户(和开发人员?)的一些意见。

先感谢您!

0 投票
1 回答
335 浏览

java - 在 Android 上使用 Dagger2 进行依赖注入

目前我不是依赖注入的粉丝,但我想尝试一下。

这就是我所拥有的:

现在我想注入 Facebook 的 CallbackManager。好的,让我们开始吧。

我创建了很多新课程……真的吗?我必须编写更多代码才能让我的开发人员生活更轻松?:-(

有了这个新类,我将 Activity 更改为:

但它不起作用。callbackManager始终为空。

这有什么问题?

0 投票
1 回答
1726 浏览

android - Dagger2:使子范围组件可访问父组件依赖项

我有以下设置:

我有以下子范围组件:

问题是PersistenceComponent具有以下组件作为其依赖项:

哪个使用JobManagerComponent,哪个是ApplicationComponent的依赖。

不幸的是,这个组件似乎不是继承自ApplicationComponent. 我需要明确地跟踪这个组件,并像这样为构建器提供它。

并在我构建持久性组件时通过 getter 提供:

我想JobManagerComponent继承自ApplicationComponent. 我猜我需要把它变成 a@Subcomponent并为它提供一个提供方法,但到目前为止,它还没有奏效(我没有得到一个构建器方法,但它仍然看不到jobManagerinside JobManagerComponent

这可能@Subcomponent吗?或者我是否需要跟踪子组件的“子组件”ApplicationComponent以防子组件依赖它?