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

android - Dagger2 组件(非作用域)不能依赖作用域组件 - 错误

我正在尝试编译https://github.com/svenjacobs/android-dagger2-example 但我遇到了与未作用域组件相关的错误,具体取决于作用域组件。(Android Studio 1.1、Gradle 2.2.1)。此外,如果有人知道其他带有片段的 Dagger2 Android 示例,我想了解它们。

更新:这是另一个非常基本的片段示例: https ://github.com/gk5885/dagger-android-sample

这是显然没有作用域的文件 ActivityComponent:

这是作用域组件:

0 投票
2 回答
957 浏览

android - 使用 dagger2 注入测试模块

我在我的 android 应用程序中使用 Dagger2。基本上我HttpClientMainActivity.

到目前为止一切顺利,效果符合预期。MainActivity现在我想为我想使用的地方编写一些单元测试(不是 android 仪器测试),TestMainActivityModule而不是MainActivityModule.

我的问题是:我如何强制MainActivity使用TestMainActivitiyModule而不是MainActivityModule?有没有好的解决方案?

我目前的方法是使用继承和覆盖getModule(),像这样

并针对TestMainActivity而不是运行单元测试MainActivity

我想它有效,但我在使用这种方法时面临的一个问题是我不能从TestMainActivityan 开始,Intent因为我无法在AndroidManifest.xml

有谁知道在 android 上使用 dagger2 进行单元测试的更好方法?

0 投票
1 回答
370 浏览

android - Gradle issues with Auto-generated code like Dagger2 in Continuous Integration

I am using AutoParcel and Dagger2 for autogenerated code, which requires use of the gradle android-apt plugin. Which means that the first compile fails, but when you run the task for a second time, it succeeds. Normally this is only a slight annoyance, but this becomes a big issue with continuous integration tools like CircleCI or TravisCI, which always run clean builds.

How can an Android dev get around this? Obviously, I do not want every CI build to report a failure.

circle.yml

0 投票
3 回答
1778 浏览

android - Dagger 2 依赖图不完整

我正在使用 Dagger 2 在我的新 Android 应用程序中注入依赖项。我想将 dao 注入到服务中。

模块:

服务:

零件:

我像这样从我的活动中使用它:

看起来 dao 没有被注入。

当您使用依赖注入解决方案时,您会期望框架也注入依赖项的依赖项。是框架问题还是我做错了什么?

0 投票
3 回答
22225 浏览

java - 使用 dagger2 进行依赖注入时,我可以只注入超类吗?

我在我的 android 应用程序中使用 Dagger2 进行 DI。我发现我必须为每个使用 @Inject 字段的类编写注入方法。有没有一种方法可以只注入父类,这样我就不必在每个子类上调用注入?以活动为例。我有一个BaseActivity每个 Activity 都扩展的那个。有没有一种方法可以在 BaseActivity 的组件中创建一个注入方法,然后在 BaseActivity 的 onCreate 中调用注入,并且子活动中的 @inject 字段会自动注入?

0 投票
1 回答
7218 浏览

java - 如何使用 Dagger2 将依赖项注入任何类型的对象?

根据http://konmik.github.io/snorkeling-with-dagger-2.html我可以添加

进入 AppComponent.java,但这对我不起作用,在文章示例中:

如果我尝试将依赖项注入到我的片段中,则注入的成员将保持为空。我在这里错过了什么明显的错误?

相关来源:

应用组件.java

应用程序模块.java

活动组件.java

活动模块.java

BaseApplication.java

BaseActivity.java

BaseFragment.java

ListFragment.java

ListFragmentPresenterImpl.java

在 Dagger_ActivityComponent 中,生成的代码如下所示:

这里不应该是 baseFragmentMemebersInjector 吗?

谢谢!

0 投票
2 回答
10335 浏览

java - Dagger 2 活动注入不起作用

我正在尝试新的匕首 2,这是我第一次实现它,但我无法让它工作。我想我明白了这个概念,我理解了这里的例子

我尝试复制相同的结构,只是对我的示例进行了一些修改。

这是扩展 Graph 的 AppComponent,我在其中定义了我想要的类。

然后在每个模块中,我提供相应的类。从这里一切正常,Dagger 接缝正确构建 Dagger_EFAppComponent。

然后在我使用构造函数初始化的应用程序类中

然后我的目标是在我的活动中注入 ImageLoader 和 EventBus。为此,我创建了一个 ActivityComponent。

然后从我的活动中我称之为注入。

所以因为我在注入方法调用之后在我的活动中声明了@Inject EventBus eventBus 应该被注入。好吧,事实并非如此。

因此,在逐步调试和跟踪我的应用程序和示例之后,我意识到 Dagger_ActivityComponent 没有正确构建。

如果初始化方法为空并且没有 Provider 被声明为变量。

我错过了什么吗?我整天都在努力让它发挥作用,但我没有成功。

感谢帮助。

0 投票
1 回答
8887 浏览

java - 匕首 2 单例不工作

使用 Dagger 2,我试图在单个范围内的多个位置注入一个单例对象。但是,似乎我的解决方案每次都会创建一个新实例。

在这个测试项目中,我有一个初始化 DaggerModule 的 MainActivity。DaggerModule 提供了 Box 和 Cat 对象,Box 以 Cat 为参数。我还在我的 MainActivity 中加入了 Cat。最后,我检查了注入的两个 Cat 变量的引用(分别在 Box 和 MainActivity 中),但它们不是同一个实例。

如果我在 MainActivity 中调用 provideCat() 两次,则会提供相同的实例。

主要活动:





提前致谢!

编辑: 如果provideBox 接受一个Cat 参数并使用它来创建Box,而不是直接从provideBox 中调用provideCat,它就可以工作。

对比

在 MainActivity 中调用 provideCat 和在 DaggerModule 的 provideBox 中调用有什么区别?难道 Dagger 编译器没有像处理外部类一样处理 DaggerModule 并且如果我在那里调用 provideCat 注释不会被应用?

0 投票
0 回答
630 浏览

android - 为什么我要在 Dagger 2 中使用我自己定义的范围而不是 @Singleton?

在 Dagger 2 中,您可以创建范围。为什么我要使用 @Singleton 注释来做这件事?

例如,此代码来自 u2020 的一个分支(最初由 Jake Wharton 创建)。它定义了一个应用程序范围:

这里我们有另一个定义 Gallery 范围的范围:

所有源代码都可以在这里找到:u2020 using Dagger 2

区别是字面上的语义吗?它们都做同样的事情吗?

谢谢。

0 投票
2 回答
1730 浏览

java - 如何使用 Dagger 2 注入 Servlet?

我在这里问(并回答了)关于 Dagger 1 的相同问题。ObjectGraph.inject现在不再存在,我将如何为 Dagger 2 做类似的事情。

这个问题可以概括为:

如果对象必须由不同的框架创建,你如何进行成员注入?(在这种情况下,是一个 Servlet 容器)。