繁体   English   中英

在 Android 中使用 dagger2 进行依赖注入

[英]Dependency Injection with dagger2 in Android

我现在正在学习在 Android 中使用 Dagger 2。 我想我理解它的工作原理,但我对一些细节有一些疑问。 AndroidInjector中有关 Dagger 2 的各种教程中,我看到了 AndroidInjector 的使用。 看起来不错,但我对此有一些疑问。

  1. 应用程序 class onCreate正在创建一个组件,该组件正在注入所有活动和片段。 这是在应用程序启动时发生的,还是在创建特定活动或片段时发生的?
  2. 在这种方法中我不喜欢的是,当我有 100 个活动并且每个活动将有 2 个片段时,在 ActivityModule 中我将不得不写 100 次:

    @ContributesAndroidInjector abstract fun contributeMyActivity(): MyActivity

    对于片段,同样的事情又重复了 200 次。 这是很多样板代码。 我是对的还是我在这里遗漏了什么? 还有其他更好的方法吗?

  3. 当应用程序组件注入所有活动时,是否不需要其他组件? 它只是在应用程序开始时创建的一个大的吗? 在某些情况下可能需要其他组件吗?

Dagger2 Android 在自定义范围和子组件方面与标准 Dagger2 略有不同
Dagger2 android 为您提供了一点不用担心子组件的杠杆作用。 您所说的实际上是一个子组件。 你的问题:

1.Application class onCreate 正在创建一个组件,该组件正在注入所有活动和片段。 这是在应用程序启动时发生的,还是在创建特定活动或片段时发生的?

回答:是的,这取决于您在该组件中还有多少活动和多少片段以及您的启动活动/片段是哪个活动/片段以及哪个活动与您的应用程序级组件直接关联,是的应用程序注入/初始化只要应用程序不被破坏,就只有一次。

2.在这种方法中我不喜欢的是,当我有 100 个活动并且每个活动将有 2 个片段时,在 ActivityModule 中我将不得不写 100 次:

@ContributesAndroidInjector 抽象有趣的contributeMyActivity(): MyActivity

对于片段,同样的事情又重复了 200 次。 这是很多样板代码。 我是对的还是我在这里遗漏了什么? 还有其他更好的方法吗?

回答:更好的方法是为每个活动提供 subComponent,您不必担心第 199 个活动会做什么,因为您的第 199 个活动与第 199 个组件相关联,而第 199 个组件仅连接到 appComponent 而不是另一个subComponent 并且一个 subComponent 与您的那个活动相关联,并且一个活动与该片段或两个片段相关联,是的,不要忘记相应地 scope 每个组件,您不必担心 appComponent 和 subComponent 就像继承子可以访问父母所拥有的一切。

3.当应用程序组件注入所有活动时,是否不需要其他组件?

回答:没有!!
你有200个活动? 您可以为每个活动制作 200 个组件,每个组件将连接到应用程序级别组件以访问应用程序级别的依赖关系/对象图
现在我要问一个简单的问题..
谁创建了 200 个活动?

Android 团队建议使用 dagger2,他们承认这是陡峭的学习曲线,但他们仍然希望开发人员使用 dagger2,并且他们更关注标准 dagger2 而不是 android dagger2。
这是匕首 android 的缺点,它强制使用将您的活动与 androidContributeInjector() 结合起来,它不会让您徒手使用组件,但标准 dagger2 可以做到这一点。我个人使用的是 dagger2-Android,但我切换到standard-Dagger2,现在它提供对组件或子组件的完全控制..

这就是你需要的实际上https://developer.android.com/training/dependency-injection/dagger-android

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM