Dagger和ButterKnife Android之间的区别

use*_*882 64 android dagger butterknife

谁能指出DaggerButterknife之间的区别?我知道Butterknife是一个视图注入库,而Dagger是一个依赖注入库.但是在线文档对我来说似乎有些开销.根据Butterknife的文档,您也可以进行非活动注射,这是Dagger的作用吗?还是我误解了什么?

Pav*_*dka 93

ButterKnife的目标只是注入视图.非活动注入只是意味着您可以提供自己的视图根来注入视图(比如手动膨胀的视图等).匕首有点复杂.只要你指定了它就可以注入你想要的任何东西Module- 满足这些依赖关系的类(或者你可以使用构造函数注入).

作为一个底线 - 我会说ButterKnife可以帮助你避免所有用于创建视图的样板代码(又名(TextView)findViewById(R.id.some_text_view);.没有更多.在引擎盖下它仍然可以完成所有那些无聊的代码.所以它不是真正的注入..

还值得一提的是,Jake Wharton是这些酷库的开发者之一:)

这是一些有用的链接:

GitHub上的Dagger示例项目

关于Devoxx的Dagger演讲(杰克沃顿)

与Dagger开发者的Dagger聚会

没有太多有用的ButterKnife链接.虽然它非常简单直接,所以希望你不需要任何东西

  • 如果你使用Dagger尝试注入视图你将会有一个非常糟糕的时间:)尝试将Butter Knife视为绑定视图而非注入的一种方法.我之所以称之为注射,是因为所有RoboGuice转换都抱怨Dagger缺乏"视图注入".它根本不是注射剂.就像回答中提到的那样,它只是一种减少样板的方法.在引擎盖下它只是像你一样调用`findViewById`! (95认同)
  • 所以你的意思是我们可以使用匕首来注入textview,editviews等吗? (2认同)
  • 我相信你可以使用限定符在Dagger中注入视图(参见Dagger文档中的QUALIFIERS部分),你将id作为限定符传递,但看起来很奇怪.我认为如果他们发现有人正在使用Dagger进行视图注入,Dagger的创建者会非常惊讶:)但从技术上讲,我没有看到任何原因导致它不起作用. (2认同)
  • 说实话,网上没有太多关于如何使用匕首,奶油刀的文件.我正在寻找一些教程,但找不到任何.官方文档对我来说似乎有很大的开支来掌握一切.无论如何我会接受你的答案,但如果你能发布一些有用的链接,那将会有所帮助.干杯! (2认同)

gre*_*and 5

这是Buterknife文档的链接。非常简单。但是,文档中没有说什么,但是Butter Knife的设计意味着您还可以在自定义视图中使用Butter Knife。只需将“ this”替换为“ context”或“ getContext”,即可确定范围。

链接:http//jakewharton.github.io/butterknife/

我在项目中结合了黄油刀,可拆分和easyAdapter的列表视图。原因是样板少,可包裹的包裹更快更干净。因此,如果您有很多ListView,我建议您使用这种方法。

链接:

https://github.com/johncarl81/parceler

https://github.com/ribot/easy-adapter


ser*_*inc 5

@JakeWharton 在评论中部分回答了这个问题:

TL;DR:它们相辅相成。使用 Butterknife 注入视图,其余使用 Dagger。

如果您使用 Dagger 尝试注入视图,那么您将度过一段非常糟糕的时光:) 尝试将 Butter Knife 视为绑定视图而不是注入的一种手段。我之所以称之为注入,是因为所有的 RoboGuice 转换者都抱怨 Dagger 缺乏“视图注入”。这根本不是真正的注射。就像答案提到的那样,这只是减少样板的一种方法。在引擎盖下,它只是像您一样调用 findViewById !