问题标签 [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 投票
2 回答
467 浏览

java - Android 中用于调试构建的备用应用程序子类

为了限制调试代码进入我的发布 APK,我尝试使用DebugMyApplication子类进行调试构建,但MyApplication在发布中使用普通类。

Application是否可以在 Debug 与 Release 版本中使用备用子类?我试过了:

  1. 在 src/debug 的根目录中定义一个 AndroidManifest.xml 文件,其中包含<application>元素的替代定义。Gradle 警告我 Main manifest 有 X 但 library 有 Y 并且DebugMyApplication未使用。
  2. 将 Application 子类的完全限定名称声明为可以在我的调试 res 文件中单独定义的资源,但<application android:name="@string/xyz"/>被解释为文字包名称而不是引用。

有关我更广泛目标的一些背景信息:

提供一个备用 Dagger 模块,该模块提供一些在发布 APK 中找不到的静态模拟 Web 服务响应。子类化我的应用程序的getModuleList()方法并更改模块列表声明似乎是最好的选择。

谢谢你的帮助!

0 投票
3 回答
1204 浏览

android - 将视图注入Android中的其他类

我在我的项目中使用 AndroidAnnotations 和 Dagger。

我想通过 Dagger 将 View(通过 AndroidAnnotations 注入到 Activity)注入到其他类中。

现在我有这个代码,但我想ActionBarDrawerToggle获得@Injection

我做了这样的事情,但它不起作用,因为 Dagger 不知道如何获取 DrawerLayout 对象。

我怎样才能让它ActionBarDrawerToggle被 Dagger 注入?

0 投票
1 回答
93 浏览

android - 片段范围的对象图

我学会了如何创建Application-scoped ObjectGraph,并从中@Inject进入我View的 s 。

然后我学会了如何创建Activity-scoped ObjectGraph,并从一个's@Inject进入我的's 。ViewActivityContext

现在我需要学习如何创建一个Fragment-scoped ObjectGraph,因为Fragment它不是 aContext并且没有被注入到我View的 s 中LayoutInflater

正如我看到的问题:我需要一种Fragment从 a 内部引用 a 的方法View,但我认为这本质上是错误的,我需要另一种解决方案

0 投票
2 回答
1491 浏览

java - Dagger 中的对象图和单例

我刚开始使用 dagger 并遇到了单例对象的一些问题。

所以单例看起来像这样:-

创建对象图的应用程序类:-

MainActivity.class:-

因此,每当我运行此程序时,单例“MySingle”的实例数为 1 ,这很好。但是,当我取消注释这些行时:-

我得到的实例数为 2。我从这里了解到 Dagger 为每个对象图创建一个单例,但是根据我使用上述 2 行的理解,我将 MainActivity.class 注入现有的对象图中,显然是使用到目前为止,这对我来说并不明显..我只是在试验它。

0 投票
3 回答
1140 浏览

java - IntelliJ 中生成代码的源代码级调试

我想在 IntelliJ中调试Dagger生成的代码。Dagger 生成的源文件放入/target/generated-test-sources/test-annotations/target/generated-sources/annotations.

我查看了运行/调试配置对话框,并没有看到任何明显的东西。我还检查了模块设置,这两个都被列为源文件夹,所以 IntelliJ 肯定知道它们是源,但由于某种原因,我在生成的代码中放置的任何断点都不会命中。

0 投票
1 回答
253 浏览

java - 使用具有依赖关系的对象构建 Map

我有一个界面:

MyInterface 的每个实现都有自己的(不同的)依赖项。例子:

我可以有数百个 MyInterface 实现。现在我想创建一个地图如下:

不幸的是,这个短路 Dagger 并不会在 MyObjectOne、MyObjectTwo、... 和 MyObjectN 中注入任何东西。此外,此时我没有 ObjectGraph,因为此代码是库/模块的一部分。

当我在寻找解决方案时,我遇到了Guice 中的MapBinder类,它似乎可以满足我的需求。Dagger 不提供此功能。

  1. 我的问题可以用 Dagger 解决吗?

  2. 如果不是,那么 MapBinder 是否可以成为 Dagger 2.0 的一项功能?

提前欢呼和感谢。

0 投票
2 回答
677 浏览

android - 当没有注入时被要求注入父类

我正在尝试使用 Dagger 并尝试设置 ObjectGraph。我创建了一个BaseModule包含我的 SharedPreferences 和 Bus 之类的东西。我创建了一个WidgetModule包含诸如 Picasso 之类的东西用于图像加载。

我正在尝试将毕加索注入我的一个适配器类。在适配器构造函数中,我得到我的 ObjectGraph 实例,然后注入适配器。我得到一个运行时异常抱怨:

Caused by: java.lang.IllegalArgumentException: No inject registered for members/<ParentClass>$1. You must explicitly add it to the 'injects' option in one of your modules.

这对我来说很奇怪,因为我没有在该课程中执行任何注射。 ParentClass是我创建适配器的地方,但注入发生在适配器本身。我真的需要声明没有注入injects注解的父类吗?这是我的适配器构造函数:

这是我的模块:

如您所见,我的适配器类在 my 中injects,那么为什么要提到父类呢?

此外,这是创建 ObjectGraph 的正确结构吗?关于includesand的文档addsTo非常稀少,所有像 U2020 这样的演示项目都与它们的实际含义模棱两可。我正在尝试分离模块,以便在需要时可以轻松覆盖它们。

编辑:事实证明,即使我将父类添加到两个模块,我也会得到异常。这很奇怪。

0 投票
0 回答
787 浏览

android - 当 dagger 已包含在编译依赖项中时,将 Espresso 添加到 instrumentTest 依赖项

我有一个 gradle 项目(使用 Gradle 1.9),我正在尝试将 espresso(来自https://github.com/JakeWharton/double-espresso)添加到我的项目中,该项目在其编译依赖项中有 dagger。

这是我的依赖结构:

依赖{

}

现在我的问题是当我在测试开始后不久通过“gradle connectedInstrumentTest”开始测试时(我看到活动被触发),我收到以下错误:

...activity.MainActivityTest > testItemText[Nexus 5 - 4.4.2] FAILED java.lang.IllegalStateException:创建对象图时出错:com.google.android.apps.common.testing.ui.espresso.FailureHandler 无法绑定com.google.android.apps.common.testing.ui.espresso.base.BaseLayerModule 类所需的密钥 com.google.android.apps.common.testing.ui.espresso.FailureHandler :ClioAndroid:connectedInstrumentTest FAILED

当我注释掉排除组时:'com.squareup.dagger' 我得到另一个错误: Instrumentation run failed due to 'java.lang.IllegalAccessError' 这是根据“ http://b.android.com/65445 ”预期的。

我认为问题是添加“排除组:'com.squareup.dagger'”与浓缩咖啡的匕首对象图相混淆。我一直无法找到解决方法。任何帮助,将不胜感激。

0 投票
1 回答
93 浏览

android - 匕首 - '将“做”与“如何”分开'是什么意思?

我一直在看 Jake 关于 Dagger 的幻灯片。在第 29 页,他说“将“做”与“如何”分开。这具体是什么意思?它有什么好处?

https://speakerdeck.com/jakewharton/android-testing?slide=29

0 投票
3 回答
9666 浏览

java - 寻找 Dagger 辅助注射的例子

来自匕首讨论@

我有一个类,它从对象图中获取一些依赖关系,并在运行时从调用者那里获取其他依赖关系。

我想出了一个解决方案,我定义了一个工厂,

现在,我不再注入ImageDownloader客户端的构造函数,而是简单地注入ImageDownloader.Factory并调用它的create()方法。

如您所见,这非常冗长且冗长。它也有一堆重复和样板。用 注释字段本身存在一些障碍@Inject,所以现在让我们忽略这种可能性。

Square 人提出了一个有趣的解决方案,使用提供程序。定义一个Factory接口,

然后在一个模块中提供它,

(再次,来自 dagger-discuss@)。

MyImageDownloader是一个由另一个类注入的类注入的类,该类由另一个类注入,...,在@Module. 这一切都以某种方式*工作,并且所有类都在构建时找到。现在,要添加一个模块,我必须明确地让对象图知道它。

我一定遗漏了一些东西——注入一个新类很容易,但添加一个新模块却很乏味。

我的问题是:在实践中如何进行辅助注射?有人有例子吗?我应该如何使用ImageModule,如果有的话?

* - “不知何故”确实暗示它对我来说是部分魔法。