69

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

4

5 回答 5

98

ButterKnife is targeted to inject views only. Non-activity injection just means that you can provide your own view root to inject views from (like with manually inflated views, etc.). Dagger is a bit more complicated. It can inject anything you want as long as you specified Module - class which satisfies those dependencies (alternatively you can use constructor injection).

As a bottom line - I would say ButterKnife helps you to avoid all that boilerplate code for creating views (aka (TextView)findViewById(R.id.some_text_view);. Nothing more. Under the hood it still does all that boring code. So it is not really an injection..

Also it worth mentioning that Jake Wharton is one of the developers for both those cool libs :)

Here is some useful links:

Dagger sample project on GitHub

Dagger presentation on Devoxx (Jake Wharton)

Dagger hangout with Dagger devs

Don't have much of useful ButterKnife links. It really simple and straight forward though, so hopefully you don't need any

于 2013-12-29T01:49:38.697 回答
5

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

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

我在我的项目中结合了黄油刀、parcelable 和 easyAdapter 用于列表视图。原因是样板文件更少,并且可以更快更清洁地进行打包。所以如果你有很多 ListViews,我推荐这种方法。

链接:

https://github.com/johncarl81/parceler

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

于 2014-04-22T08:59:27.617 回答
5

@JakeWharton 在评论中部分回答:

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

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

于 2015-06-19T11:27:29.007 回答
4

区别很简单:黄油刀就像一把匕首,只是无限锋利。
正如文档中指出的那样。

于 2015-04-25T21:38:15.860 回答
0

ButterKnife 旨在简化点击监听器的注册,并减少findViewById()调用提供的样板文件。

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

忽略 Guice 和 MVVM 上的文字,阅读Dependency InjectionThe Android Way. 这几乎回答了 Dagger 的意图和简化。

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

于 2016-04-07T19:16:53.713 回答