【问题标题】:Difference between Dagger and ButterKnife AndroidDagger 和 ButterKnife Android 的区别
【发布时间】:2013-12-29 01:13:45
【问题描述】:

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

【问题讨论】:

    标签: android butterknife dagger


    【解决方案1】:

    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 链接。虽然它非常简单直接,所以希望你不需要任何

    【讨论】:

    • 那么你的意思是我们可以使用 dagger 来注入 textviews、editviews 等?
    • 我相信您可以使用限定符在 Dagger 中注入视图(请参阅 Dagger 文档中的 QUALIFIERS 部分),其中您将 id 作为限定符传递,但它看起来真的很奇怪。我认为如果 Dagger 的创建者发现有人在使用 Dagger 进行视图注入,他们会非常惊讶:) 但从技术上讲,我看不出它不应该工作的任何原因..
    • 说实话,关于如何使用匕首、黄油刀的在线文档并不多。我正在寻找一些教程,但找不到任何教程。官方文档似乎让我无法掌握所有内容。无论如何我都会接受你的回答,但如果你能发布一些有用的链接,那将会很有帮助。干杯!
    • 如果你使用 Dagger 来尝试注入视图,你会遇到非常糟糕的情况 :) 尝试将 Butter Knife 视为绑定视图而不是注入的一种方式。我之所以称它为注入,是因为所有 RoboGuice 转换者都在抱怨 Dagger 缺少“视图注入”。这根本不是真正的注射。就像答案提到的那样,这只是减少样板的一种方法。在引擎盖下它只是像你一样调用findViewById
    • 直接从马嘴里......可以这么说。传播好话! :)
    【解决方案2】:

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

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

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

    链接:

    https://github.com/johncarl81/parceler

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

    【讨论】:

      【解决方案3】:

      @JakeWharton 在评论中部分回答:

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

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

      【讨论】:

      • 难怪当时最新版改名为ViewBinder
      【解决方案4】:

      区别非常简单:A butter knifea dagger 一样,只是锐度要小得多。
      正如文档中指出的那样。

      【讨论】:

      • 我实际上在文档中阅读了这一点,但最终在这里获得了更好的解释。
      • 但是匕首意味着视图绑定只有无限多的样板代码,因为您必须强制转换您可以获得的任何视图子类。 ButterfKnife 在编译时确定转换类型。你,不能告诉匕首这样做。
      • @LouisCAD Dagger 不适用于视图绑定 (see comment)。
      【解决方案5】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-01
        相关资源
        最近更新 更多