Hilt 会取代 Dagger2 吗?

Pav*_*vic 11 android dependency-injection dagger-2 dagger-hilt

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

所以根据它的概述描述:

Hilt 的工作原理是通过代码为您生成 Dagger 设置代码。这带走了使用 Dagger 的大部分样板,真正留下了定义如何创建对象以及在哪里注入它们的方面。Hilt 将生成 Dagger 组件和代码以自动为您注入您的 Android 类(如活动和片段)。

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

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

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

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

Dav*_*jak 13

Hilt 会取代 Dagger2 吗?

不。Hilt 在引擎盖下仍然使用 Dagger。您可以将其视为Android的固执己见的 Dagger 扩展。我说自以为是,因为它对使用普通 Dagger 与使用具有刚性组件结构的 Hilt 相比有一些限制,但同时这带走了使用 Dagger 的大部分样板

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

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

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

嗯,它是在 alpha 中,事情可能会改变。在生产中使用它之前,我肯定会等待。

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


Max*_*lov 8

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

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

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

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