Dagger和ButterKnife Android之间的区别

时间:2013-12-29 01:13:45

标签: android butterknife dagger

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

5 个答案:

答案 0 :(得分:93)

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

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

另外值得一提的是,Jake Wharton是这两款酷炫图书馆的开发者之一:)

以下是一些有用的链接:

Dagger sample project on GitHub

Dagger presentation on Devoxx (Jake Wharton)

Dagger hangout with Dagger devs

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

答案 1 :(得分:5)

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

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

我在我的项目中将Butter Knife,parcelable和easyAdapter结合起来用于列表视图。原因是样板较少,并且可以更快速,更清晰地分配。所以如果你有很多ListViews,我推荐这种方法。

链接:

https://github.com/johncarl81/parceler

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

答案 2 :(得分:4)

差异非常简单: A butter knife就像a dagger一样,只是无限锐利。
正如文档中所指出的那样。

答案 3 :(得分:4)

@ JakeWharton在评论中部分回答:

TL; DR:他们相互补充。使用Butterknife注入视图,Dagger用于其余部分。

  

如果您使用Dagger尝试注入视图,那么您将拥有一个非常好的视图   糟糕的时间:)尝试将Butter Knife视为绑定视图的一种手段   而不是注射。我只称它为注射因为所有的   RoboGuice转换者抱怨缺乏“视图注入”   与匕首。它根本不是注射剂。喜欢的答案   提到,这只是一种减少样板的方法。它是引擎盖下的   只是像你一样调用findViewById!

答案 4 :(得分:0)

ButterKnife用于简化注册点击侦听器,并减少findViewById()调用提供的样板。

Dagger和Dagger2是通用依赖注入系统。

忽略Guice和MVVM上的文本,并阅读Dependency InjectionThe Android Way。这几乎解决了Dagger的意图和简化。

https://spring.io/blog/2011/08/26/clean-code-in-android-applications