在 Dagger 2 中模拟 RoboGuice 注入

Mimic RoboGuice injection in Dagger 2

我开始学习 Dagger 2,有一件事让我印象深刻:注入机制。我之前使用 RoboGuice,我的项目看起来像 MVP 机制

所以控制器是 @Singleton 并且在每个视图中我总是只调用 @Inject DedicatedController。它很好用。 但是在 Dagger 2 中,为了达到同样的效果,我需要在 Modules 中定义 every 控制器(根据模式甚至可能在许多文件中),并在 Component 中定义每个查看注入的目标。

在我看来,这太可怕了,破坏了使用 Dagger 2 简化编码的想法。关于如何简化此机制并避免开销,您有任何解决方案吗?

如果您要使用 3rd 方库,您可以享受它的优点并接受它的限制。如果您认为限制超过了附加值,请不要使用它。每个图书馆都是如此。

关于 Dagger2,dagger 与组件和模块一起工作——这就是它的构建方式。话虽如此 - 有一个非常酷的功能可以让你有时绕过这个问题 - 这就是注入的构造函数。

当构造函数标有 @Inject 注释时,它会做两件事:

  1. Dagger2 知道 class 依赖项。
  2. Dagger2 知道如何实例化 class。

这意味着 class具有注入构造函数的 es 不需要由模块创建,也不需要了解组件。

无法对 Activity 和 Fragment 执行此操作,因为您无法控制它们何时被实例化。

TL;DR

如果您的模型和演示者都有一个注入的构造函数,那么只有您的视图(活动和片段)需要知道 Component