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

android - 匕首无法注入类型参数字段

我正在开发一个android应用程序,我正在尝试注入一个在抽象类中参数化的字段:BaseListFragment

但我在编译时收到以下错误:错误:找不到符号类 S

这是我的 BaseFragment 代码:

这是我的服务模块:

这是扩展 BaseListFragment 的类的示例:

反正有注入参数化类型吗?

问候,

0 投票
2 回答
439 浏览

android - 将依赖项添加到 Dagger 2 时,Facebook sdk 未编译

我在 build.gradle (app) 中包含了匕首,如下所示:

{compile 'com.squareup.dagger:dagger:1.2.+' provided 'com.squareup.dagger:dagger-compiler:1.2.+'}

现在我正在尝试将我的项目升级到 Dagger 2.0 并使用 Mockito 和 Espresso 创建单元测试,我的新依赖项包括:

compile 'com.google.dagger:dagger:2.0-SNAPSHOT' apt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT' provided 'org.glassfish:javax.annotation:10.0-b28'

我在项目中包含的项目中包含 Facebook SDK,但我收到错误error: cannot find symbol class R

我还添加了存储库maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }

我将不胜感激任何帮助了解这里发生了什么以及如何解决它。

0 投票
3 回答
26379 浏览

java - 使用组件依赖时的单例问题

我在理解为什么以下代码不起作用时遇到了问题。

我有以下项目结构:

在哪里

在哪里

我将所有内容初始化为:

一旦编译发生,我会收到以下错误:

错误:(11, 1) 错误: com.test.CComponent (unscoped) may not reference scoped bindings: @Provides @Singleton com.test.XXX com.test.CCModule.provideXXX()

我的目标是让一个组件从其他组件继承绑定以对对象(单例)具有相同的引用。

0 投票
2 回答
3259 浏览

java - 打破循环依赖以使用依赖注入

我刚开始使用dagger 2,之前没有使用过任何其他依赖注入框架。现在我陷入了循环依赖,我不知道如何正确解决它。考虑一个服务器应用程序中的以下示例,它使用Java NIO的反应器模式:

我有一个Handler附加到选择键的对象,当新信息到达网络时执行该对象:

该类Client保存有关已连接客户端的一些状态。所有连接的客户端都在Server类中进行管理。

当新的输入到达时,Handler 会创建Command对象,在服务器上执行它们,服务器最终会响应客户端。

所以我现在正在做的是Client手动创建一个对象Handler,传入一个this引用,以便能够发送响应:

所以我现在的问题是:设计有问题吗?是否可以解耦ClientHandler?还是我应该忍受这个而不使用依赖注入everywhere

我很欣赏你的建议

0 投票
2 回答
1942 浏览

java - 编译时的 java.lang.NoSuchMethodError

我正在尝试编译一个 Android 项目,但没有成功。错误信息是:

任务 ':mobile:_compileAppDebug' 执行失败。

java.lang.NoSuchMethodError: com.google.auto.common.MoreTypes.asTypeElements(Ljavax/lang/model/util/Types;Ljava/lang/Iterable;)Lcom/google/common/collect/ImmutableSet;

这是我的模块的 gradle 依赖项,我在其中指定了许多库,包括 google Auto:

当我查看依赖项时,我认为我只需要 google auto 值,因为这是缺少的方法所在的位置,但添加提供的方法并不能解决问题。

项目 gradle 文件包含 retrolambda 插件

谁能帮我确定哪些依赖项导致编译错误?有趣的是,当我将 gradle 文件复制到一个空项目中时,一切都运行良好。

0 投票
1 回答
2170 浏览

android - 如何在 Kotlin 中使用 Dagger 的 2 @Named 限定符

@Named最近我在 Kotlin 中遇到了 qualifier 的问题。我认为从这个改变:

进入这个

或者

会解决我的问题。但它没有,它甚至没有编译。

0 投票
1 回答
17371 浏览

java - 什么决定了 Dagger 2 中组件(对象图)的生命周期?

我试图围绕 Dagger 2 中的范围,特别是范围图的生命周期。您如何创建一个在您离开范围时将被清理的组件。

对于 Android 应用程序,使用 Dagger 1.x,您通常在应用程序级别有一个根范围,您可以扩展它以在活动级别创建一个子范围。

只要您保留对子范围的引用,子范围就存在,在这种情况下,这就是您的 Activity 的生命周期。在 onDestroy 中删除引用可确保范围图可以自由地被垃圾收集。

编辑

杰西威尔逊最近发布了一个过失

Dagger 1.0 严重搞砸了它的范围名称...... @Singleton 注释用于根图和自定义图,因此很难弄清楚事物的实际范围是什么。

以及我读过/听到的所有其他内容都指向 Dagger 2 改进了示波器的工作方式,但我很难理解其中的区别。根据@Kirill Boyarshinov 下面的评论,组件或依赖项的生命周期仍然像往常一样由具体引用确定。那么 Dagger 1.x 和 2.0 范围之间的区别纯粹是语义清晰度的问题吗?

我的理解

匕首 1.x

依赖关系要么是要么@Singleton不是。这同样适用于根图和子图中的依赖关系,导致依赖关系绑定到哪个图的歧义(请参阅在 Dagger 中是缓存的子图中的单例,或者当新的活动子图时它们总是被重新创建是构造的?

匕首 2.0

自定义范围允许您创建语义清晰的范围,但在功能上等同于@Singleton在 Dagger 1.x中应用。




要点是 using@PerActivity传达了您对该组件生命周期的意图,但最终您可以随时随地使用该组件。Dagger 唯一的承诺是,对于给定的组件,范围注释的方法将返回单个实例。我还假设 Dagger 2 使用组件上的范围注释来验证模块仅提供在相同范围内或非范围内的依赖项。

总之

依赖项仍然是单例或非单例,但@Singleton现在适用于应用程序级单例实例,而自定义范围是使用较短生命周期注释单例依赖项的首选方法。

开发人员负责通过删除不再需要的引用来管理组件/依赖项的生命周期,并负责确保组件仅在其预期范围内创建一次,但自定义范围注释更容易识别该范围.

6.4 万美元的问题*

我对 Dagger 2 范围和生命周期的理解是否正确?

* 实际上不是一个 64,000 美元的问题。

0 投票
1 回答
1035 浏览

android - 没有用于 JUnit 测试的 Dagger2 生成文件

新的 AndroidStudio 1.1 版本引入了单元测试支持。此 URL http://tools.android.com/tech-docs/unit-testing-support提供了如何设置 IDE 以运行 Android 源的 JUnit 测试的分步说明。

这个插件https://bitbucket.org/hvisser/android-apt用于向 AS 提供 Dagger2 生成的文件,它适用于通常的 Android 代码,但不幸的是,没有任何 JUnit 测试类生成的 Dagger2 文件。我试图配置依赖,如

androidTestApt 'com.google.dagger:dagger-compiler:2.0-SNAPSHOT'

根据 android-apt 插件文档但没有成功。

我认为问题出在单元测试的不同源目录中 - 它src/test/java不是src/androidTest/javaandroid 仪器测试使用的目录。

您能否提供任何帮助或信息来解决此问题?

0 投票
2 回答
9578 浏览

android - Gradle:强制使用存储库作为依赖项

我想知道是否有一种方法可以强制 gradle 为一个依赖项使用存储库。例如:

我想com.google.dagger从中签出,https://oss.sonatype.org/content/repositories/snapshots因为现在它会尝试从中签出,https://maven.fabric.io/repo从而导致以下错误:

谢谢你。

0 投票
6 回答
37520 浏览

android - Dagger2 依赖 - Gradle

我正在尝试将 Dagger2 添加到我在 Android Studio 中的项目中,但我找不到正确的依赖项来粘贴到 build.gradle 中。你能帮我把正确的线路发给我吗?