问题标签 [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.
java - Android 中用于调试构建的备用应用程序子类
为了限制调试代码进入我的发布 APK,我尝试使用DebugMyApplication
子类进行调试构建,但MyApplication
在发布中使用普通类。
Application
是否可以在 Debug 与 Release 版本中使用备用子类?我试过了:
- 在 src/debug 的根目录中定义一个 AndroidManifest.xml 文件,其中包含
<application>
元素的替代定义。Gradle 警告我 Main manifest 有 X 但 library 有 Y 并且DebugMyApplication
未使用。 - 将 Application 子类的完全限定名称声明为可以在我的调试 res 文件中单独定义的资源,但
<application android:name="@string/xyz"/>
被解释为文字包名称而不是引用。
有关我更广泛目标的一些背景信息:
提供一个备用 Dagger 模块,该模块提供一些在发布 APK 中找不到的静态模拟 Web 服务响应。子类化我的应用程序的getModuleList()
方法并更改模块列表声明似乎是最好的选择。
谢谢你的帮助!
android - 将视图注入Android中的其他类
我在我的项目中使用 AndroidAnnotations 和 Dagger。
我想通过 Dagger 将 View(通过 AndroidAnnotations 注入到 Activity)注入到其他类中。
现在我有这个代码,但我想ActionBarDrawerToggle
获得@Injection
:
我做了这样的事情,但它不起作用,因为 Dagger 不知道如何获取 DrawerLayout 对象。
我怎样才能让它ActionBarDrawerToggle
被 Dagger 注入?
android - 片段范围的对象图
我学会了如何创建Application
-scoped ObjectGraph
,并从中@Inject
进入我View
的 s 。
然后我学会了如何创建Activity
-scoped ObjectGraph
,并从一个's@Inject
进入我的's 。View
Activity
Context
现在我需要学习如何创建一个Fragment
-scoped ObjectGraph
,因为Fragment
它不是 aContext
并且没有被注入到我View
的 s 中LayoutInflater
。
正如我看到的问题:我需要一种Fragment
从 a 内部引用 a 的方法View
,但我认为这本质上是错误的,我需要另一种解决方案
java - Dagger 中的对象图和单例
我刚开始使用 dagger 并遇到了单例对象的一些问题。
所以单例看起来像这样:-
创建对象图的应用程序类:-
MainActivity.class:-
因此,每当我运行此程序时,单例“MySingle”的实例数为 1 ,这很好。但是,当我取消注释这些行时:-
我得到的实例数为 2。我从这里了解到 Dagger 为每个对象图创建一个单例,但是根据我使用上述 2 行的理解,我将 MainActivity.class 注入现有的对象图中,显然是使用到目前为止,这对我来说并不明显..我只是在试验它。
java - IntelliJ 中生成代码的源代码级调试
我想在 IntelliJ中调试Dagger生成的代码。Dagger 生成的源文件放入/target/generated-test-sources/test-annotations
和/target/generated-sources/annotations
.
我查看了运行/调试配置对话框,并没有看到任何明显的东西。我还检查了模块设置,这两个都被列为源文件夹,所以 IntelliJ 肯定知道它们是源,但由于某种原因,我在生成的代码中放置的任何断点都不会命中。
java - 使用具有依赖关系的对象构建 Map
我有一个界面:
MyInterface 的每个实现都有自己的(不同的)依赖项。例子:
我可以有数百个 MyInterface 实现。现在我想创建一个地图如下:
不幸的是,这个短路 Dagger 并不会在 MyObjectOne、MyObjectTwo、... 和 MyObjectN 中注入任何东西。此外,此时我没有 ObjectGraph,因为此代码是库/模块的一部分。
当我在寻找解决方案时,我遇到了Guice 中的MapBinder类,它似乎可以满足我的需求。Dagger 不提供此功能。
我的问题可以用 Dagger 解决吗?
如果不是,那么 MapBinder 是否可以成为 Dagger 2.0 的一项功能?
提前欢呼和感谢。
android - 当没有注入时被要求注入父类
我正在尝试使用 Dagger 并尝试设置 ObjectGraph。我创建了一个BaseModule
包含我的 SharedPreferences 和 Bus 之类的东西。我创建了一个WidgetModule
包含诸如 Picasso 之类的东西用于图像加载。
我正在尝试将毕加索注入我的一个适配器类。在适配器构造函数中,我得到我的 ObjectGraph 实例,然后注入适配器。我得到一个运行时异常抱怨:
Caused by: java.lang.IllegalArgumentException: No inject registered for members/<ParentClass>$1. You must explicitly add it to the 'injects' option in one of your modules.
这对我来说很奇怪,因为我没有在该课程中执行任何注射。 ParentClass
是我创建适配器的地方,但注入发生在适配器本身。我真的需要声明没有注入injects
注解的父类吗?这是我的适配器构造函数:
这是我的模块:
如您所见,我的适配器类在 my 中injects
,那么为什么要提到父类呢?
此外,这是创建 ObjectGraph 的正确结构吗?关于includes
and的文档addsTo
非常稀少,所有像 U2020 这样的演示项目都与它们的实际含义模棱两可。我正在尝试分离模块,以便在需要时可以轻松覆盖它们。
编辑:事实证明,即使我将父类添加到两个模块,我也会得到异常。这很奇怪。
android - 当 dagger 已包含在编译依赖项中时,将 Espresso 添加到 instrumentTest 依赖项
我有一个 gradle 项目(使用 Gradle 1.9),我正在尝试将 espresso(来自https://github.com/JakeWharton/double-espresso)添加到我的项目中,该项目在其编译依赖项中有 dagger。
这是我的依赖结构:
依赖{
}
现在我的问题是当我在测试开始后不久通过“gradle connectedInstrumentTest”开始测试时(我看到活动被触发),我收到以下错误:
...activity.MainActivityTest > testItemText[Nexus 5 - 4.4.2] FAILED java.lang.IllegalStateException:创建对象图时出错:com.google.android.apps.common.testing.ui.espresso.FailureHandler 无法绑定com.google.android.apps.common.testing.ui.espresso.base.BaseLayerModule 类所需的密钥 com.google.android.apps.common.testing.ui.espresso.FailureHandler :ClioAndroid:connectedInstrumentTest FAILED
当我注释掉排除组时:'com.squareup.dagger' 我得到另一个错误: Instrumentation run failed due to 'java.lang.IllegalAccessError' 这是根据“ http://b.android.com/65445 ”预期的。
我认为问题是添加“排除组:'com.squareup.dagger'”与浓缩咖啡的匕首对象图相混淆。我一直无法找到解决方法。任何帮助,将不胜感激。
android - 匕首 - '将“做”与“如何”分开'是什么意思?
我一直在看 Jake 关于 Dagger 的幻灯片。在第 29 页,他说“将“做”与“如何”分开。这具体是什么意思?它有什么好处?
https://speakerdeck.com/jakewharton/android-testing?slide=29
java - 寻找 Dagger 辅助注射的例子
来自匕首讨论@:
我有一个类,它从对象图中获取一些依赖关系,并在运行时从调用者那里获取其他依赖关系。
我想出了一个解决方案,我定义了一个工厂,
现在,我不再注入ImageDownloader
客户端的构造函数,而是简单地注入ImageDownloader.Factory
并调用它的create()
方法。
如您所见,这非常冗长且冗长。它也有一堆重复和样板。用 注释字段本身存在一些障碍@Inject
,所以现在让我们忽略这种可能性。
Square 人提出了一个有趣的解决方案,使用提供程序。定义一个Factory
接口,
然后在一个模块中提供它,
(再次,来自 dagger-discuss@)。
MyImageDownloader
是一个由另一个类注入的类注入的类,该类由另一个类注入,...,在@Module
. 这一切都以某种方式*工作,并且所有类都在构建时找到。现在,要添加一个模块,我必须明确地让对象图知道它。
我一定遗漏了一些东西——注入一个新类很容易,但添加一个新模块却很乏味。
我的问题是:在实践中如何进行辅助注射?有人有例子吗?我应该如何使用ImageModule
,如果有的话?
* - “不知何故”确实暗示它对我来说是部分魔法。