问题标签 [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 回答
423 浏览

dependency-injection - 将 Dagger 添加到现有项目

我正在尝试将 Dagger 添加到现有的 Web 应用程序中并且遇到了设计问题。

目前我们的处理程序是在调度程序中创建的,类似于

在登录处理程序中,我们可能会调用类似的函数

我希望能够将 loginService 注入处理程序,但无法找出最佳方法。调度程序中有很长的处理程序列表,并且将它们全部作为实例变量注入似乎是大量的代码添加。

有解决此类问题的方法吗?

0 投票
1 回答
2275 浏览

android - 用 Dagger 注入泛型类

我的项目中有一个抽象基类

我尝试向其中注入这样的通用类:

有没有办法让匕首与这种通用注入一起工作?Dagger 生成如下代码:

然后因为“T 无法解析为类型”而失败。有没有办法让它生成一个

在这种情况下?

0 投票
1 回答
7637 浏览

android - 通过 Eclipse 构建的 Dagger 示例失败并显示“请确保为此模块运行代码生成。”

我在 Android 中使用 Dagger 进行依赖注入,使用 Eclipse 进行构建。我已经克隆了android-activity-graphs以用作示例。

我已经根据https://github.com/square/dagger/issues/126中的staxgr设置了我的环境 这些是我的库:​​ dagger-1.1.0.jardagger-compiler-1.1.0.jarjavax.inject.jar

最后,我将 Eclipse 中的源文件夹更改为指向src/main/java(而不是仅指向src/),以便 Eclipse 通过 package 关键字检测相关文件。

项目构建,但在运行时立即失败,出现以下异常:

如何让 Dagger 示例通过 Eclipse 工作?

0 投票
1 回答
280 浏览

android - Dagger 找不到可注射的成员

我一直在尝试使用 Dagger (v1.1.0) 为我的 Android 应用程序设置活动图。虽然它编译得很好,但我得到了下面显示的这个错误(这里的完整跟踪):

我会尽力突出重要部分,但如果我遗漏了什么,我的完整项目在GitHub 上。只需运行./gradlew clean assemble以构建 apk。

我的ActivityModule具有 Dagger 似乎找不到的提供程序方法。

这个模块肯定被添加到我的BaseActivity中的 applicationGraph(然后保存为 activityGraph)中,并且BaseFragment正在将自己注入到 activityGraph 中。

0 投票
1 回答
717 浏览

android - 是否有关于在注入依赖项时 Dagger 何时回退到反射的文档?

我的团队已经在我们的 Android 应用程序中采用 Dagger 进行依赖注入,我必须说到目前为止我们都喜欢它。但是,我们希望确保我们有效地使用它。我想知道是否有人可以解释,或者是否有任何文档解释 Dagger 退回到反射以注入依赖项的情况?

0 投票
5 回答
71175 浏览

java - 找不到导入 javax.inject.Inject 包

我正在尝试将 Dagger 实现为 IntelliJ 项目中的依赖注入器,但我的代码在以下方面失败:

Intellij 正在寻找 ' javax' 包,但不是 ' inject' 包,所以它失败了。

我是 Android 新手,所以如果这是一个没有道理的问题,我很抱歉,但是谁能告诉我为什么找不到注入包?

0 投票
1 回答
1593 浏览

android - Dagger 项目在 getApplication 覆盖上静默失败

我试图让 Dagger 简单示例在 IntelliJ 中运行,但它在 DemoBaseActivity 类中的 getApplication 调用中失败:

当它遇到注入方法时,应用程序会静默失败,没有错误。我已经使用基类 Activity 的实例而不是 DemoBaseActivity 构建了项目,并且部署得很好。

有什么想法吗?

编辑:

当 Activity 的 getApplication() 调用的返回值被转换为自定义 DemoApplication 类型时,它似乎正在中断。

编辑:这是堆栈跟踪:

10-03 05:15:25.331:错误/AndroidRuntime(5035):致命异常:主要 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.badlogic.androidgames.simple/com.badlogic.androidgames.simple.ui。 HomeActivity}:java.lang.ClassCastException:android.app.Application 无法在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 的 android.app.ActivityThread.handleLaunchActivity 中转换为 com.badlogic.androidgames.simple.DemoApplication (ActivityThread.java:2261) 在 android.app.ActivityThread.access$600(ActivityThread.java:141) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 在 android.os.Handler.dispatchMessage(Handler .java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:5103) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:525) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit. java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method) 原因:java.lang.ClassCastException: android.app.Application 不能在 com.badlogic.androidgames.simple.ui.HomeActivity.onCreate(HomeActivity.java: 30) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 在 android.app 的 android.app.Activity.performCreate(Activity.java:5133)。ActivityThread.performLaunchActivity(ActivityThread.java:2175)

0 投票
1 回答
2034 浏览

java - 使用覆盖模块扩展 ObjectGraph

我现在正在玩 Dagger,显然有些功能不适合我。

我实际上是在尝试ObjectGraph.plus()使用模拟模块来扩展我的 ObjectGraph(通过),该模块覆盖了已经创建的图中的真实模块之一。但显然我的模拟模块被忽略了,所以调用了真正的接口。

但是,如果我尝试在图形创建阶段提供我的模拟模块 - 一切正常..

在我的情况下MockModule1,覆盖提供者RealModule1

不起作用

工作正常

RealModule1.java

MockModule1.java

我错过了什么吗?

0 投票
1 回答
523 浏览

android - 在 dagger plus'ed 模块中放置注入属性的正确位置

当有加号图形时,我怀疑哪个是在匕首中设置注入属性(而不是注释)的正确位置。

我们有这样的场景:

这样做时效果很好:

之后我们添加了一个新模块,从那一刻起,它是唯一应该提供 B 的模块:

那是失败的

IllegalStateException 类 ClassWithInjects 不需要 B 的绑定

这样做时:

当我移动它时它工作

注入 = ClassWithInjects.class

属性从 BaseModule 到 AdditionalModule。

那么,在使用 plus'ed 模块时,我应该在哪里放置注入属性?它是否必须位于在调用 .plus(...) 时用作参数的模块之一中?

根据this github issue,我必须将注入放在具有实例绑定的模块中,我尝试将依赖项注入(上面示例中的ClassWithInjects)但是,如果我有几个模块提供实现所有所需的不同绑定怎么办该实例的依赖关系?我是否必须创建一个包含所有其他模块的模块并将注入属性放在那里?

0 投票
1 回答
2580 浏览

android - 如何在 IntelliJ 中配置匕首

我下载了 dagger,因为它似乎是 Android 中依赖注入的一个不错的选择。但是我在集成编译器时遇到了一些麻烦。是否有关于正确设置的提示?我遵循了有关 android 注释的说明,因为这个项目似乎很相似。但它对匕首不起作用。

我做了什么:我将 dagger-1.1.0.jar 和 javax.inject-1.jar 添加到项目的 lib 文件夹中,并添加了一个名为“compile-libs”的新文件夹,其中包含“dagger-compiler-1.1.0.jar " 因为我不想将此文件打包在 *.apk 中。

项目文件结构

我将 dagger 和 javax.inject 添加到模块的依赖项中。

现在棘手的部分:我将编译器添加到注释编译器设置中:

设置

当我运行程序时,出现以下错误:无法加载类 de.myproject.app.modules.AndroidModule 的模块适配器。请确保已为此模块运行代码生成。

所以在我看来,代码生成并没有发生。此外,我项目中的“生成”文件夹是空的。那么在 IntelliJ 的 Android 项目中让 dagger 工作的正确设置是什么?