有人能指出Dagger和Butterknife之间的区别吗?我知道Butterknife是一个视图注入库,而Dagger是一个依赖注入库。但是在线文档对我来说似乎有些开销。根据Butterknife的文档,您也可以进行非活动注射,这是Dagger的作用吗?或者我误解了什么?
答案 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,我推荐这种方法。
链接:
答案 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 Injection
和The Android Way
。这几乎解决了Dagger的意图和简化。
https://spring.io/blog/2011/08/26/clean-code-in-android-applications