【发布时间】:2013-12-29 01:13:45
【问题描述】:
谁能指出Dagger 和Butterknife 之间的区别?我知道 Butterknife 是一个视图注入库,而 Dagger 是一个依赖注入库。但是在线文档对我来说似乎有点开销。根据 Butterknife 文档,您也可以进行非活动注入,这是 Dagger 所做的吗?还是我误会了什么?
【问题讨论】:
标签: android butterknife dagger
谁能指出Dagger 和Butterknife 之间的区别?我知道 Butterknife 是一个视图注入库,而 Dagger 是一个依赖注入库。但是在线文档对我来说似乎有点开销。根据 Butterknife 文档,您也可以进行非活动注入,这是 Dagger 所做的吗?还是我误会了什么?
【问题讨论】:
标签: android butterknife dagger
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 链接。虽然它非常简单直接,所以希望你不需要任何
【讨论】:
findViewById!
这里是 Buterknife 文档的链接。 这很简单。但是,文档没有说明,但 Butter Knife 的设计暗示您也可以在自定义视图中使用 Butter Knife。只需将“this”替换为“context”或“getContext”即可确定范围。
链接: http://jakewharton.github.io/butterknife/
我在我的项目中将 Butter Knife、parcelable 和 easyAdapter 结合起来用于列表视图。原因是样板文件更少,并且可以更快更清洁地进行打包。所以如果你有很多 ListView,我推荐这种方法。
链接:
【讨论】:
@JakeWharton 在评论中部分回答:
TL;DR:它们相互补充。使用 Butterknife 注入视图,其余部分使用 Dagger。
如果你使用 Dagger 来尝试注入视图,你将会有一个非常 糟糕的时间:) 尝试将黄油刀视为绑定视图的一种手段 而不是注射。我只称它为注射,因为所有的 RoboGuice 转换者抱怨缺乏“视图注入” 与匕首。这根本不是真正的注射。喜欢答案 提到,这只是减少样板的一种方法。引擎盖下是 只是像你一样调用 findViewById!
【讨论】:
ViewBinder。
区别非常简单:A butter knife 与 a dagger 一样,只是锐度要小得多。
正如文档中指出的那样。
【讨论】:
ButterKnife 旨在简化注册点击侦听器,并减少 findViewById() 调用提供的样板文件。
Dagger 和 Dagger2 是通用的依赖注入系统。
忽略Guice和MVVM上的文字,阅读Dependency Injection和The Android Way。这几乎回答了 Dagger 的意图和简化。
https://spring.io/blog/2011/08/26/clean-code-in-android-applications
【讨论】: