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

android - 在 apklib 中包含 dagger 生成的源

我有一个在内部使用 dagger (1.1.0) 的 mavenized apklib。maven 构建annotations使用适当的适配器类在构建输出文件夹中生成文件夹。但是,这些不包含在生成的 apklib 中。

将生成的源包含在 apklib 中的构建过程的正确配置是什么?

我正在使用 maven v3.0.4、android-maven-plugin v3.6.0 和 maven-compiler-plugin v3.1

编辑:这是我的pom.xml

0 投票
1 回答
790 浏览

android - android dagger 无法提供注入

我想在我的 android 应用程序中包含匕首。我有两个类FakeServiceConnectorNetServiceConnector实现ServiceConnector接口

所以我把代码放在我的活动中

Abd 我为解决依赖关系创建提供程序

但是当我按下按钮时 serviceConnector 为空。所以我的问题是:

1)我的库中只包含 dagger-1.1.0.jar 和 java.inject.jar 是否足以正确安装 dagger?

2)我是否需要编写比我为匕首编写的代码更多的代码,例如创建 Android

0 投票
1 回答
1140 浏览

android - 是否可以 @Inject 成员(通过 @Provides 提供),包含来自基本活动的活动上下文

好的。让我试着把这种情况分解一下,因为我认为标题可能有点不清楚。在继续之前,我会尽可能说,我已经尝试将这个应用程序的基本结构建立在官方 dagger 示例的基础上。

本质上,我想要做的是能够将LocationClient注入我的SplashActivity,以便在LocationClient.connect()打开应用程序后立即建立连接(通过 )。

现在,很明显,LocationClient 不能通过任何类型的默认构造函数注入(它需要一些非常具体的东西(上下文和一些回调)。所以,我 @Provides在我的ActivityModule:

LocationService是我为实现所需的回调而创建的类LocationClient。我还通过@Provides我的ActivityModule

我会在最后提供所有相关文件的完整代码,以供参考。

所以,我想@InjectLocationClient我的SplashActivity. 但是,当我这样做时,我收到以下错误:

我发现只有两种方法可以避免这个错误,而且都不能完成我需要的。我可以

  1. 将注入移动LocationClient到片段上。这不好,因为这一点对于应用程序的流程来说太晚了。我希望能够在LocationClient此时开始调用 ,这需要建立连接。

  2. @Provides在for中删除对 Activity Context 的引用LocationService,并将@Providesfrom移动ActivityModuleAndroidModule。这也不好,因为我需要 Activity 上下文来完成回调中的一些事情(如在 Google 示例中设置新的位置服务所见)。

所以,这就是我陷入的困境。我希望这有点道理。我很难解释它,因为它太分散了。下面是 my ActivityModule、 my AndroidModule、 my Application 文件和 my的代码BaseActivity

活动模块

安卓模块

申请文件

基本活动

0 投票
1 回答
1938 浏览

android - Dagger:如何根据构建实例化不同的 ObjectGraph

我正在尝试使用 Dagger 学习依赖注入。

我知道在您的类中,您不会直接实例化客户端代码所依赖的对象,而是使用@Inject 声明它,通过模块创建 ObjectGraphs,并从 ObjectGraph 中获取对象:

但是,所有这些代码现在都取决于您用于创建 ObjectGraph 的模块(在此示例中为 DripCoffeeModule)。

现在我想在我的 Android 应用程序中使用它。对于调试版本,我想要我的类的特定实现,对于发布版本,实现会有所不同。

我该怎么做?如何设置 build.xml ant 脚本以使模块提供我想要的特定实现?(或选择正确的模块)...

谢谢你。

0 投票
5 回答
35385 浏览

android - 如何使用 Dagger 为活动和片段以外的事物设置依赖注入?

我开始使用Dagger设置依赖注入,如下所示。请感到鼓舞来纠正我的实施,因为我可能在那里有错误!实现遵循项目提供的android-simple 示例。在下文中,您可以看到我如何成功地为ActivitiesFragments. 我现在尽量保持简单,所以我决定注入Timber作为Android 的 log util的记录器替代品。

到目前为止,AndroidModule它没有在任何地方使用,但在需要 aContext和时可能会有所帮助,LayoutInflater例如在CursorAdapters.

我不确定哪些特定于应用程序的提供程序会出现在这里。我现在继续记录

我准备LoggingModule了提供对Timber的访问。

基类Activities将自身注入到对象图中...

......以及木材已经存在的任何子类的好处。

相同的Fragments:基类做了肮脏的工作......

...并且子类受益于其超类。

到目前为止,一切都很好。但是如何将Timber注入到, , , 和BaseCursorAdapterhelperBaseContentProvider方法BaseSQLiteOpenHelperBaseService呢?BaseAsyncTaskstatic

Christopher Perry不推荐使用的android 示例指出了如何将Adapter注入ListFragment,但没有指出如何将Context, Resources, LayoutInflater,Cursor注入(Cursor)Adapter或只是Timber


参考:

0 投票
1 回答
1445 浏览

java - 当injects子句中的类无法注入时,为什么dagger不会在编译时失败?

我有这堂课:

...和这个模块...

我认为这应该产生编译时错误是错误的吗?在运行时我得到:

(因为该类没有 @Inject 注释的构造函数)。但是匕首不应该在编译时知道吗?

0 投票
1 回答
1277 浏览

android - Dagger 中的 DI 和泛型类

我正在尝试从 Dagger 中的对象图创建一个通用类。以咖啡机为例,有什么模式可以创建一个通用的 CoffeeApp 类吗?

例如...

谢谢!

0 投票
0 回答
412 浏览

android - 使用 ActivityIntrumentationTestCase2 在 Dagger 中自定义应用程序类

我一直试图将我的自定义应用程序“注入”到 ActivityInstrumentationTestCase2。

为了能够进行单元测试和注入,我的应用程序实现了这样的接口:

在活动中,我使用以下方法获取图表:

使用这种接口,我可以在我的单元测试中注入模拟依赖项。但是当我想运行功能测试时,我得到了下一个异常:

那是因为,这种测试在没有实现我的接口的情况下注入了默认应用程序,我的问题是:任何可能的解决方案是否像自定义 TestRunner 或类似的东西?

谢谢 :)

0 投票
2 回答
1699 浏览

java - Android注解和匕首

我正在尝试使用 Dagger 注入 android Annotated Activity。

java.lang.IllegalArgumentException: No inject registered for members/com.app.server.AddServerActivity_. You must explicitly add it to the 'injects' option in one of your modules.

如果我尝试将其添加com.app.server.AddServerActivity_到模块中,我会得到一个不同的错误

编辑:好的,匕首如何处理其他处理器生成的类似乎是一个已知问题。

https://github.com/square/dagger/issues/322

0 投票
1 回答
1109 浏览

android - Android 为产品风味定制工作流程

我有一个应用程序,其中包含一堆产品风格,基本上是单个应用程序的白标签。但是,有时,由于客户想要一些稍微不同的东西,因此在某些方面与主要流程有一些分歧。到目前为止,我们一直在为这些案例编辑代码并使用意大利面条代码(大量的 if 和 else)来确保其他应用程序不会中断。不用说,这不是一种非常可扩展(甚至是理智)的方式来做到这一点。

一种选择是在 productFlavor 源文件夹中编写活动类,即src/flavor1/java/AnActivity.java,src/flavor2/java/AnActivity.java等。由于 productFlavor 代码不能覆盖这些src/main类,因此即使没有自定义,这也需要为每个新风味复制相同的类。我不太喜欢这个选项。它导致大量冗余代码和类名最终不再具有描述性,因为它们都必须具有相同的名称才能覆盖其他名称,即使它们可能正在做不同的事情。

另一种选择可能是使用类似的东西为不同的实现Dagger构建ObjectGraph和注入意图。例如,如果是flavor1,当单击按钮 X 时,将注入一个意图ActivityA,如果是flavor2,则注入一个意图ActivityB

这似乎是一种更好的方法,但我仍然不确定如何实现将覆盖默认绑定的类ObjectGraph

关于实现或其他选项的任何想法?我不受约束Dagger,我刚刚开始研究依赖注入和测试,以便其他框架也能正常工作。