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

android - 如果没有 @Provides-annotated 方法,就无法提供上下文,但它是吗?

我有以下简单的模块:

以及相应的简单组件:

我在这里创建组件:

它在编译时抛出此错误:Error:(22, 13) error: android.content.Context cannot be provided without an @Provides-annotated method,但如您所见,它带有注释@Provides

这真的很奇怪,因为当我取消限定符注释时问题就消失了。

以防万一,这是我的@ForApplication限定词:

这实际上是一个教科书 Dagger2 示例。我究竟做错了什么?

0 投票
2 回答
674 浏览

java - Dagger2:用组件本身注入模块提供的实现类

考虑到模块都是通过 Dagger1 规范相互共享的,您可以通过构造函数参数complete=false, library=true接收方法提供的元素,如下所示。@Provides

但是,您也可以仅指定一个包含组件图的依赖项(thePresenterCustomApplication实例),并使用该组件图来注入您的实现类。

这样,您只需要依赖演示者的对象图,而不必弄乱构造函数参数。

哪个是更好的方法?

编辑:我在一个不太好的重构项目中的一个更清晰和具体的例子如下:

然后

然后

问题:这样,当注入器准备好时,所有依赖项都由应用程序的组件提供,而不是通过构造函数提供。但这是一个好方法吗?从长远来看,是否有任何警告?

EDIT2:我在这里有注射器,但它很糟糕。

在另一个项目中拥有的那个更好

0 投票
0 回答
118 浏览

java - Dagger 2:注入提供的类

再次理解 Dagger 的工作原理时遇到了一些麻烦,这次是用一些代码。

我有几个类和它们各自的接口

和一个大致类似的组件

那么,在所有注入正确发生的情况下,我还需要创建一个SomeViewvia实例吗?getSomeView

我试图拥有一个@Module(includes = DataModule.class)那个@Provides ISomeView provideISomeView()(或者,provideISomeView(IDataProvider dataProvider)至少确实DataProvider在所述方法中给了我一个正确的实例),但无论我尝试什么,如果IDataProvider不手动设置模块中的字段甚至在SomeManager构造函数本身——这使得那里的陈述@Inject变得毫无意义。

0 投票
2 回答
2180 浏览

java - Dagger2 module: how to obtain context to pass to the constructor of a class I want to provide

First time using Dagger2.

In my android application I have a MyApplication class that extends Application. I also have an ImageAssistant class that is a collection of related image-processing methods. In my MyApplicaiton class I used to instantiate an ImageAssistant for all the activities to use.

Now I am trying to make it work with Dagger2, but I dont know how to pass a context in the module that provides ImageAssistant

This is how my code looked:

Now, enter Dagger 2, here is what I have

in package .modules:

EDIT: This is how my module looks now, but I still dont know how to tie everything together:

And this is the AppComponent:

0 投票
5 回答
50418 浏览

android - Dagger 2 注入 Android 应用程序上下文

我正在使用 Dagger 2 并且可以正常工作,但是我现在需要访问Android Application Context

我不清楚如何注入和访问上下文。我试图这样做如下:

但是,这会导致以下异常:

java.lang.RuntimeException:无法创建应用程序:java.lang.IllegalStateException:必须设置 mainActivityModule

如果我检查 Dagger 生成的代码,则会在此处引发此异常:

我不确定这是否是注入 Context 的正确方法 - 任何帮助将不胜感激。

0 投票
2 回答
4781 浏览

android - Dagger 2 - 无法注入对象

我试图在 Android 应用程序中做一个非常简单的依赖注入。我使用 dagger 2 作为 DI 工具。

问题是没有发生注入:

这是我的代码:

//看到 Motor.java 的所有敬畏。

这是使用电机类的 Vehicle.java:

然后我创建了一个 VehicleModule.java 类来定义我的提供者:

然后我有一个带注释的接口组件,定义如下:

这是我应该注入的Android mainactivity 类,但它不是,任何人都可以帮忙:

我在车辆上得到一个空指针异常:

顺便说一下,我的 gradle 依赖项如下所示:

0 投票
1 回答
3450 浏览

java - 在 Gradle 的 Java 插件的 compileTestJava 中找不到 Dagger 2 的 Component 生成的类

好吧,我正在迁移我的 Android 项目以使用清洁架构:

https://github.com/android10/Android-CleanArchitecture

这意味着我的部分代码在域模块中(纯 Java,不依赖于 Android)。对于这个项目,我使用的是 Dagger 2,它使用注释处理器(在编译时)生成源代码。

我的项目有以下 Gradle 配置:

在我的测试源中,我创建了接口 TestComponent 并且 Dagger 应该生成 DaggerTestComponent。当我尝试通过命令行或 Android Studio 构建我的项目时,我收到了找不到符号的编译错误,然后:Execution failed for task ':domain:compileTestJava'

我试图用'compile'和'testCompile'来改变'provided'。它仍然无法正常工作。

奇怪的是,在 compileTestJava 失败后,我可以在domain/build/classes/test中找到生成的 DaggerTestComponent.java 。那么,如果它正在生成,为什么我会收到这个编译错误?

需要注意的是,这个问题只发生在测试源中。我已经生成了主要源代码中使用的 Dagger 2 的源代码。

更新:

我评论了每个尝试使用 DaggerTestComponent 并尝试再次构建的地方。在domain/build/classes/test中,现在我不仅可以找到 DaggerTestComponent.java ,还可以找到 .class 编译结果。因此,它正在生成源文件并对其进行编译。为什么使用它编译文件不起作用?这似乎是一些顺序问题,比如在编译其他源时生成的源还没有准备好。

0 投票
1 回答
251 浏览

dagger-2 - 如何包含库 .h 文件

我已经从简单的 Dagger-2 代码中成功生成了 Objc .m 和 .h 文件。

https://gist.github.com/OscarRyz/ffd976fcae9acf87dbe1

现在我正在尝试使用编译这些文件,j2objcc但错误消息说它找不到 Dagger-2 类的 .h:

问题:这是否意味着我需要在生成 ObjC 代码时拥有库源代码,以便也可以生成那些的 .h?

0 投票
0 回答
239 浏览

android - Dagger 2 - 每个活动与 application.java 中添加到图形中的模块

将模块添加到 application.java 文件中的对象图是否明智?还是应该只在每个活动中添加它们?

例如,在一个活动类中,假设我们已经有一个车辆模块,但它没有添加到对象图中。然后我们 c 可以在 onCreate 中执行以下操作:

然后,这会将车辆模块添加到图中,然后我们可以@inject在名为车辆的变量上使用注释。

这与在 application.java 文件中执行相同的调用形成对比。前者不是记忆力更好吗?

0 投票
1 回答
819 浏览

java - url的java注释 - 什么是用例?

我试图弄清楚在我继承的代码中创建的注释的作用。

这是每个代码的注释定义:

然后使用 dagger 2(android 的依赖注入框架),它的使用如下:

我更关心@BaseUrl 注释。在这种情况下它做了什么?

该项目使用改造。