Hilt 会取代 Dagger2 吗?

Does Hilt replace Dagger2?

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

所以根据它的概述描述:

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

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

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

2。 Hilt 是 Dagger2 的附加功能,可以简化 Dagger2 的使用?

3。除了还在 Alpha 阶段,还有什么缺点吗?

Does Hilt replace Dagger2?

没有。 Hilt 仍然在引擎盖下使用 Dagger。您可以将其视为 Android 的 自以为是的 Dagger 扩展 。我说固执己见,因为与使用具有严格组件结构的 Hilt 相比,使用普通 Dagger 可以做的事情有一些限制,但同时 这消除了使用 Dagger 的大部分样板.

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

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

Are there any disadvantages, other than it is still in Alpha?

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

与普通 Dagger 或 dagger.android 相比的好处在于,由于严格的组件关系结构,它的设置应该更简单。这还允许 Hilt 删除一些样板文件并使设置不那么冗长。它应该使整体集成更容易。
但同时这也是它的缺点。您可以使用普通 Dagger 构建各种依赖关系图,而 Hilt 将您限制在它们的预定义结构中。所以它 might not be as powerful 当涉及到大型和复杂的项目时。

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

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

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

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