Dagger 2例子

55

Dagger 2即将到来,但现有的示例甚至无法直接编译,而文档则是从Dagger 1复制-粘贴-替换而来。

有没有人有一个在Google Dagger 2上正常运行的应用程序的示例?


还有一个,但我明天会添加一个具体的例子。供参考,在具有multiDex的lib项目中引用它们在主应用程序项目中使用,最新的Android Studio,BuildTools 21.1.+。 - MLProgrammer-CiM
关于依赖项,dagger-compile已提供,但是dagger在库项目中被编译。 - MLProgrammer-CiM
5
请参考以下链接了解Dagger 2的初始版本:https://github.com/JakeWharton/u2020/pull/42。 - Jake Wharton
采用 "apt" 代替 "-compiler" 模块提供的方式。已注意到。 - MLProgrammer-CiM
4
这个例子也能够运行 https://github.com/gk5885/dagger-android-sample - MLProgrammer-CiM
显示剩余10条评论
4个回答

27

1
不错!只是要小心在Multidex应用程序上使用Lombok和一般注释处理器,因为它们已知在Dalvik中存在重大错误。 - MLProgrammer-CiM
3
如果您能撰写一篇关于您的演示的博客文章,那将非常棒。对于新手来说,很难将大多数实现与http://google.github.io/dagger/的解释相关联。 - Aung Pyae
感谢您分享的示例,让我有了启动的机会。比谷歌团队分享的示例好多了。 - nemo
1
这个例子包含了很多额外的框架/库,使得代码更加冗长,让那些刚开始学习Dagger 2的人感到困惑。 - frankelot
分别使用 .Activity 和 .Application 有什么作用?我以前从未见过这种做法。学习起来可能很重要。 - Ethan_AI

20

我刚刚将 u2020-mvp 应用程序移植到Dagger 2。我们将其用作沙盒应用程序。顺便说一下,Dagger 2具有很好的作用域实现。组件真的是非常重要的。

它基于 Christian Gruber 制作的u2021。你也可以检查一下。

希望对你有所帮助 :)


你的 build.gradle 文件中为什么有两个 repositories{} 部分? - IgorGanapolsky
@IgorGanapolsky,其中一个是用于apt gradle插件的buildscript存储库,另一个是用于项目依赖项的存储库。它们与根存储库不同,因此必须进行覆盖。 - Kirill Boyarshinov
拥有多个相同的东西很令人困惑,违反了DRY原则。 - IgorGanapolsky
2
是的,它确实这样做。我自己也不喜欢。将存储库分开的主要原因是当您有多个子项目(例如库、数据层)时的情况。在根文件中考虑它们作为完整存储库列表是多余的。然而,出于示例目的,最好将它们全部保留在根文件中。我会在有时间的时候修复它。感谢您的建议! - Kirill Boyarshinov

19

如果你想要一个简单直接的方式来在Gradle/Android Studio上构建Dagger 2项目,可以参考https://github.com/bytehala/dagger2-gradle-quickstart

提交记录中,我列出了将完整项目转换为Dagger 2所需的步骤。

该项目的目标受众是那些没有依赖注入经验的人。

除Butterknife外,没有使用任何其他库。

警告 本示例项目旨在简单易懂,而不是完备的。 只使用了以下功能:

  • @Module
  • @Component
  • @Injects
  • @Provides
  • @Singleton

关于作用域、子模块等主题留给读者自行探究。


2
我建议将所有与IntelliJ有关的依赖(如.iml文件)都移除。 - MLProgrammer-CiM
真的吗?我不知道必须这样做。我以为AS提供的.gitignore就足够了。哈哈我会在明天按照你的建议去做,我保证。还有其他文件应该从git中删除吗? - lemuel
一切都没问题。如果你使用通配符:+ 版本号,.iml 文件和.idea 文件夹往往会有一些本地路径以及与 gradle 版本控制相关的不良内容。 - MLProgrammer-CiM

3

7
很好的发现,虽然我从未觉得咖啡机样品很有启发性。 - MLProgrammer-CiM
你应该在某个地方添加任意注入,否则这个例子就不完整。 - MLProgrammer-CiM
谢谢。示例从官方 https://github.com/google/dagger/tree/master/examples/simple/src/main/java/coffee 导入。您可以在 Thermosiphon 和 CoffeeMaker 中看到注入。 - Andrew Chen
就我个人而言,我觉得咖啡机示例很令人困惑。它缺少很多信息,例如:在简单情况下(当您可以通过自己注释类构造函数并使用“@Inject”注释来提供类对象时),没有必要使用模块。 - Tomasz Dzieniak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接