13

深入研究 Google 的 DI 框架 Dagger2 以决定使用 DI 框架在中型应用程序中使用它,我还注意到Hilt

所以根据它的概述描述:

Hilt 通过代码为您生成 Dagger 设置代码来工作。这消除了使用 Dagger 的大部分样板,实际上只留下了定义如何创建对象以及在何处注入它们的方面。Hilt 将生成 Dagger 组件和代码以自动为您注入您的 Android 类(如活动和片段)。

Hilt 根据您的传递类路径生成一组标准的 Android Dagger 组件。这需要用 Hilt 注释标记你的 Dagger 模块,以告诉 Hilt 它们应该进入哪个组件。在您的 Android 框架类中获取对象是通过使用另一个 Hilt 注释来完成的,该注释会将 Dagger 注入代码生成到您将扩展的基类中。对于 Gradle 用户,扩展这个类是通过底层的字节码转换来完成的。

1.它既没有取代Dagger2也不是它的继任者?

2. Hilt 是 Dagger2 的附加功能,从而简化了 Dagger2 的使用?

3. 除了还在Alpha,还有什么缺点吗?

4

2 回答 2

15

Hilt 会取代 Dagger2 吗?

不,Hilt 在引擎盖下仍然使用 Dagger。您可以将其视为 Android 的一个固执己见的 Dagger 扩展。我说固执己见,因为它对使用普通 Dagger 与使用 Hilt 所做的事情有一些限制,后者具有刚性组件结构,但同时这消除了使用 Dagger 的大部分样板

您的问题也可以作为答案...

  • 它既没有取代 Dagger2 也不是它的继任者
  • Hilt 是 Dagger2 的附加功能,从而简化了 Dagger2 的使用

除了仍处于 Alpha 阶段之外,还有什么缺点吗?

好吧,它处于 alpha 阶段,情况可能会发生变化。在生产中使用它之前,我肯定会等待。

与普通 Dagger 或 dagger.android 相比的好处是,由于严格的组件关系结构,它应该更易于设置。这也允许 Hilt 删除一些样板文件并使设置不那么冗长。它应该使集成更容易。
但同时这也是它的缺点。您可以使用普通的 Dagger 构建各种依赖关系图,而 Hilt 将您限制在其预定义的结构中。因此,对于大型和复杂的项目,它可能没有那么强大。

于 2020-07-15T08:26:55.290 回答
8

Hilt 基于单一中央核心的理念。核心是 ApplicationComponent,每个子子组件都为其生成的代码做出贡献。有一些使用 Dagger 连接在一起的大量 gradle 模块开发大型项目的背景,这里有一些关键点:

  • 如果将所有内容都放在一个 AppComponent 中,则构建会非常缓慢。Dagger-Android 和 Hilt 就是这样做的。两者都只是用一堆子组件扩展了 AppComponent,这些子组件提供了自己的绑定和实体。绑定越多,子组件越大 -> AppComponent 和构建时间越大。

  • 另一方面,plain Dagger 是高度可配置的。您可以选择使用组件依赖项而不是子组件,并避免您的 AppComponent 因绑定任何功能而变得臃肿。您可以保持功能高度解耦。因此 -> 减少构建时间。这很重要,实际上。

在我看来,Hilt 对于新手来说是一个不错的选择,可以快速开始做一些 MVP。

于 2020-10-21T20:59:14.360 回答