问题标签 [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.
android - Android Dagger - 没有无参数构造函数的模块
如何组合没有无参数构造函数的模块。我有一个包含多个模块的库,我想在我的应用程序中重用它们。但是,这些模块需要一些参数。以下示例描述了我的设置:
图书馆:
请注意,LibModule2 依赖于 LibModule1 提供的一些对象。
应用程序: 在我的应用程序中,我将来自 LibModule1 和 LibModule2 的对象注入到一个类中。但我不知道,如何组合这些模块。包含参数不起作用,因为两个模块都没有无参数构造函数。addTo不起作用,因为我需要两个库模块,但是参数让我只设置一个类。创建两个注入我的类MyClass.class的应用程序模块不起作用(一个类只能由一个模块注入,对吧?!)。
我该如何解决这个问题?
dagger - Dagger 和 Object Graph 范围与 Flow/Mortar
所以这个周末我花了很多时间在Mortar 和 Flow上,我想我终于把大部分时间都解决了。我发现它比我最初想象的要复杂一些,主要是因为我还没有完全了解 Dagger 的 ObjectGraph 范围,Mortar 非常依赖它。我已经在 Dagger 的网站上阅读了尽可能多的内容,但我发现当它与 Dagger 相关时,我发现缺乏关于这个主题的信息。
所以我有几个问题: 1. 我看到了他们对@Singleton 的范围界定的例子:
在这种情况下,Presenter 是否专门针对此模块,因为它是一个内部类?2. 如何确保它的一个实例只在这个对象图中创建,而不是在全局应用程序对象图中?2. 如果 Presenter 太大了,我想把它移到它自己的单独类中怎么办?我如何将其范围仅限于该模块?3. 我注意到他们示例中的一些 Module 类是静态的,而另一些则不是。这对范围界定有影响吗?4. 我在哪里可以阅读更多内容以更好地理解 Dagger 的对象图。我需要更好地理解包含、注入、addTo 以及它们如何在 ObjectGraph 创建等中使用:
android - 我缺少一些匕首基础知识 [CoffeeMaker 应用示例]
任何喜欢匕首的人都可以提示我,因为我没有得到它。所以我按照咖啡机的例子,它工作正常,但是我想在这种情况下提供另一个依赖关系咖啡机:
它没有说:
但是它被注入到 CofeeApp 中,有人可以解释为什么会这样吗?更重要的是,除了官方文档和Jesse Wilson 的演讲之外,您还有其他关于匕首的好文档吗?
谢谢
java - Dagger 的嵌套/递归注入
使用 Dagger 时,哪些方法允许在也通过注入实例化的对象上自由/轻松地实例化 @Inject 字段。
例如,下面的代码会将 Bar 类型的对象注入给定的 Foo 对象。它将以显示的两种方式之一执行此操作。但是,每个 Bar 对象的 Sly 字段与该行为不匹配。
富
砰
狡猾
模块
测试
在任何一种情况下,Bar 的 Sly 都没有被实例化/@Injected。当然,Dagger 允许构造函数注入,从而解决了这个问题。我想知道是否有其他方法可以将这些类放入构造函数的参数列表中。什么适合你?
android - 基于构建类型和风格的更好的 Dagger 依赖注入?
我正在使用方法为 Dagger 提供模块,在这个问题Android Customize Workflow for Product Flavors的回答中描述
我们的方法有点不同——我们有构建类型 inModules
和构建类型 in 。我们的主要模块被称为它包括所有其他。debug
src/debug/java
release
src/release/java
ApplicationModule
Modules
insrc/debug/java
为调试、日志记录等和覆盖提供了一些自定义行为ApplcationModule
。
现在我们需要有基于应用程序风格的自定义行为。
这样做的正确方法是什么?
例如,风味 A 到 C 应该提供自定义行为,而风味 D 到 F 应该提供基本的默认行为。
到目前为止,我想出了这样的。
- 所有口味(不是构建类型)在
src/flavorX/java/com.application.FlavorModule
- 为了避免代码重复,只有风味 A 到 C 提供自定义行为,而其他完全空的,以便项目可以编译。我的模块提供了默认行为
src/main/java
有没有更好的方法来达到这样的结果?因为我不喜欢空src/flavorX/java/com.application.FlavorModule
,也不喜欢重复代码……
android - Robolectric 不使用测试应用程序
根据这个链接,我可以创建一个测试应用程序,Robolectric 将自动开始在测试中使用。我不能让它工作。
我正在使用 Dagger 进行依赖注入,并为Activity
和Application
. 然后我的每个活动都扩展了包装活动类而不是普通的 old Activity
。
我遇到的问题是,在测试中,Application
模块提供的依赖项无法解决,因此测试失败。这是因为我们的大多数测试只是构建一个活动(使用Robolectric.buildActivity()
),而不是从Application
.
我希望以某种方式修改 Robolectric 测试运行程序以在Application
. 或者使用上面链接中概述的测试应用程序。
我创建了一个测试应用程序,但仍然收到相同的测试错误,因为测试没有在这个测试应用程序下运行。我尝试将测试应用程序移动到不同的包等,但没有任何变化。
我正在寻找一些关于如何去做我想做的事情的建议。对那些有 Dagger 经验以及他们如何进行测试的人特别感兴趣。
android - 将参数从模块传递到模块
使用 Dagger,对于简单的事情来说效果很好,但是当我将参数传递给模块时,我不明白规则。基本上是想将应用程序上下文传递给提供者方法,并创建一个需要上下文的 Volles 请求队列。
我像这样创建我的模块:
应用上下文模块:
请求队列模块:
正如你所看到的,我玩了一些构造函数注入,看起来我想念第一次理解这一点。无论如何,使用 @ApplicationContext 注解来阐明应该注入 App Context。但我得到这个编译错误:
错误:com.app.android.application.modules.RequestQueueModule 的provideRequestQueue(android.content.Context) 需要@com.app.android.annotation.ApplicationContext()/android.content.Context 错误:com 上没有可注入成员。 android.volley.RequestQueue。你想添加一个可注入的构造函数吗?com.app.android.io.service.AutoCacheService 要求 com.app.android.application.modules.ReleaseModules
我花了几个小时来解决这个问题。但是真的看不出问题。我还尽量避免 library = true 开关,因为我的理解是它会在编译时禁用图形检查。一些食谱可以更好地理解这一点......
更新:看起来这个SO 问题与我的相似。
java - 我什么时候应该使用工厂而不是提供者
Dagger 文档显示了使用 aProvider<Filter>
来获取Filter
实例,这似乎很有意义。
我正在编写一个ListAdapter
实例化视图,我希望 Dagger 注入它。我很想将 aProvider<ViewType>
注入我的ListAdapter
, 并调用mViewProvider.get()
实例化视图。
但是,Dagger 文档说:
注入
Provider<T>
可能会创建令人困惑的代码,并且可能是图形中范围错误或结构错误的对象的设计气味。通常你会想要使用 aFactory<T>
或 aLazy<T>
或者重新组织代码的生命周期和结构,以便能够只注入 aT
我可以看到如何以与使用辅助注射时所需的方式类似的方式使用工厂。
但是,考虑到我必须自己编写前者,使用我自己Factory<T>
的比使用 Dagger's 有什么优势?Provider<T>
java - 如何从仅在运行时知道的类型中获取匕首实例
我正在处理具有类型参数的注释。此类型参数用于实例化一个新对象。
使用 Google Guice,我会注入“注入器”本身并使用它来查找正确的实例。但是我对 Dagger 有点陌生,我没有看到网上描述的任何解决方案。我知道 ObjectGraph 可以给我一个实例。我/我可以注入 ObjectGraph 本身吗?我该怎么做?
android - Gradle dagger lint:被包忽略
我使用 Gradle 创建了一个 Android 项目。我添加了一个 Dagger 库:
尝试编译项目后,由于 lint 异常导致构建失败:
../../../../../../.gradle/caches/modules-2/files-2.1/com.squareup.dagger/dagger-compiler/1.2.1/c8bf6c2fda9b27f4d44a2aa4280df525a1408771/dagger-compiler -1.2.1.jar:库中的包引用无效;不包含在 Android 中:javax.annotation.processing。引用自 dagger.internal.codegen.GraphAnalysisErrorHandler。
../../../../../../.gradle/caches/modules-2/files-2.1/com.squareup.dagger/dagger-compiler/1.2.1/c8bf6c2fda9b27f4d44a2aa4280df525a1408771/dagger-compiler -1.2.1.jar:库中的包引用无效;不包含在 Android 中:javax.lang.model.type。引用自 dagger.internal.codegen.GeneratorKeys。
../../../../../../.gradle/caches/modules-2/files-2.1/com.squareup.dagger/dagger-compiler/1.2.1/c8bf6c2fda9b27f4d44a2aa4280df525a1408771/dagger-compiler -1.2.1.jar:库中的包引用无效;不包含在 Android 中:javax.lang.model.util。引用自 dagger.internal.codegen.GraphAnalysisErrorHandler。
../../../../../../.gradle/caches/modules-2/files-2.1/com.squareup/javawriter/2.3.0/4b290e394ea3109be5c0b7f08ff75de089125122/javawriter-2.3.0.jar : 库中的包引用无效;不包含在 Android 中:javax.lang.model.element。引用自 com.squareup.javawriter.JavaWriter。
因此,我必须修复或使 lint 忽略 Dagger 包。我已经设置lint.xml
,但我想不出一种忽略的方法:
谢谢。