在Dagger 2中模仿RoboGuice注射

时间:2016-01-15 07:48:19

标签: android dependency-injection roboguice dagger-2

我开始学习Dagger 2,有一件事让我很难受:注射机制。我之前使用的是RoboGuice,我的项目看起来像MVP机制

  • 观看次数(活动/片段),
  • 控制器(所有逻辑),
  • 模型(简单对象)

所以控制器是@Singleton,在每个视图中我总是只调用@Inject DedicatedController。它很棒。 但是在Dagger 2中实现同样的目标我需要在Modules中定义每个控制器(根据模式甚至可能在许多文件中),并在Component中定义每个View注射目标。

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

1 个答案:

答案 0 :(得分:1)

如果您要使用第三方库,您将享受其优势并接受其限制。如果您认为限制超过附加值,请不要使用它。每个图书馆都是如此。

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

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

  1. Dagger2知道类的依赖关系。
  2. Dagger2知道如何实例化该类。
  3. 这意味着带有注入构造函数的类不需要由模块创建,也不需要了解组件。

    无法对活动和碎片进行此操作,因为您无法控制它们何时被实例化。

    <强> TL; DR

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