问题标签 [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 - 在 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
android - android dagger 无法提供注入
我想在我的 android 应用程序中包含匕首。我有两个类FakeServiceConnector,NetServiceConnector实现ServiceConnector接口
所以我把代码放在我的活动中
Abd 我为解决依赖关系创建提供程序
但是当我按下按钮时 serviceConnector 为空。所以我的问题是:
1)我的库中只包含 dagger-1.1.0.jar 和 java.inject.jar 是否足以正确安装 dagger?
2)我是否需要编写比我为匕首编写的代码更多的代码,例如创建 Android
android - 是否可以 @Inject 成员(通过 @Provides 提供),包含来自基本活动的活动上下文
好的。让我试着把这种情况分解一下,因为我认为标题可能有点不清楚。在继续之前,我会尽可能说,我已经尝试将这个应用程序的基本结构建立在官方 dagger 示例的基础上。
本质上,我想要做的是能够将LocationClient注入我的SplashActivity
,以便在LocationClient.connect()
打开应用程序后立即建立连接(通过 )。
现在,很明显,LocationClient 不能通过任何类型的默认构造函数注入(它需要一些非常具体的东西(上下文和一些回调)。所以,我 @Provides
在我的ActivityModule
:
LocationService
是我为实现所需的回调而创建的类LocationClient
。我还通过@Provides
我的ActivityModule
:
我会在最后提供所有相关文件的完整代码,以供参考。
所以,我想@Inject
在LocationClient
我的SplashActivity
. 但是,当我这样做时,我收到以下错误:
我发现只有两种方法可以避免这个错误,而且都不能完成我需要的。我可以
将注入移动
LocationClient
到片段上。这不好,因为这一点对于应用程序的流程来说太晚了。我希望能够在LocationClient
此时开始调用 ,这需要建立连接。@Provides
在for中删除对 Activity Context 的引用LocationService
,并将@Provides
from移动ActivityModule
到AndroidModule
。这也不好,因为我需要 Activity 上下文来完成回调中的一些事情(如在 Google 示例中设置新的位置服务所见)。
所以,这就是我陷入的困境。我希望这有点道理。我很难解释它,因为它太分散了。下面是 my ActivityModule
、 my AndroidModule
、 my Application 文件和 my的代码BaseActivity
:
活动模块
安卓模块
申请文件
基本活动
android - Dagger:如何根据构建实例化不同的 ObjectGraph
我正在尝试使用 Dagger 学习依赖注入。
我知道在您的类中,您不会直接实例化客户端代码所依赖的对象,而是使用@Inject 声明它,通过模块创建 ObjectGraphs,并从 ObjectGraph 中获取对象:
但是,所有这些代码现在都取决于您用于创建 ObjectGraph 的模块(在此示例中为 DripCoffeeModule)。
现在我想在我的 Android 应用程序中使用它。对于调试版本,我想要我的类的特定实现,对于发布版本,实现会有所不同。
我该怎么做?如何设置 build.xml ant 脚本以使模块提供我想要的特定实现?(或选择正确的模块)...
谢谢你。
android - 如何使用 Dagger 为活动和片段以外的事物设置依赖注入?
我开始使用Dagger设置依赖注入,如下所示。请感到鼓舞来纠正我的实施,因为我可能在那里有错误!实现遵循项目提供的android-simple 示例。在下文中,您可以看到我如何成功地为Activities
和Fragments
. 我现在尽量保持简单,所以我决定注入Timber作为Android 的 log util的记录器替代品。
到目前为止,AndroidModule
它没有在任何地方使用,但在需要 aContext
和时可能会有所帮助,LayoutInflater
例如在CursorAdapters
.
我不确定哪些特定于应用程序的提供程序会出现在这里。我现在继续记录。
我准备LoggingModule
了提供对Timber的访问。
基类Activities
将自身注入到对象图中...
......以及木材已经存在的任何子类的好处。
相同的Fragments
:基类做了肮脏的工作......
...并且子类受益于其超类。
到目前为止,一切都很好。但是如何将Timber注入到, , , 和BaseCursorAdapter
helperBaseContentProvider
方法BaseSQLiteOpenHelper
中BaseService
呢?BaseAsyncTask
static
Christopher Perry不推荐使用的android 示例指出了如何将Adapter注入ListFragment,但没有指出如何将Context
, Resources
, LayoutInflater
,Cursor
注入(Cursor)Adapter
或只是Timber。
参考:
java - 当injects子句中的类无法注入时,为什么dagger不会在编译时失败?
我有这堂课:
...和这个模块...
我认为这应该产生编译时错误是错误的吗?在运行时我得到:
(因为该类没有 @Inject 注释的构造函数)。但是匕首不应该在编译时知道吗?
android - Dagger 中的 DI 和泛型类
我正在尝试从 Dagger 中的对象图创建一个通用类。以咖啡机为例,有什么模式可以创建一个通用的 CoffeeApp 类吗?
例如...
谢谢!
android - 使用 ActivityIntrumentationTestCase2 在 Dagger 中自定义应用程序类
我一直试图将我的自定义应用程序“注入”到 ActivityInstrumentationTestCase2。
为了能够进行单元测试和注入,我的应用程序实现了这样的接口:
在活动中,我使用以下方法获取图表:
使用这种接口,我可以在我的单元测试中注入模拟依赖项。但是当我想运行功能测试时,我得到了下一个异常:
那是因为,这种测试在没有实现我的接口的情况下注入了默认应用程序,我的问题是:任何可能的解决方案是否像自定义 TestRunner 或类似的东西?
谢谢 :)
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_
到模块中,我会得到一个不同的错误
编辑:好的,匕首如何处理其他处理器生成的类似乎是一个已知问题。
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
,我刚刚开始研究依赖注入和测试,以便其他框架也能正常工作。