【问题标题】:Mimic RoboGuice injection in Dagger 2在 Dagger 2 中模拟 RoboGuice 注入
【发布时间】:2016-01-15 07:48:18
【问题描述】:

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

  • 视图(活动/片段),
  • 控制器(所有逻辑),
  • 模型(简单对象)

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

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

【问题讨论】:

    标签: android dependency-injection roboguice dagger-2


    【解决方案1】:

    如果您要使用 3rd 方库,您会享受它的优势并接受它的局限性。如果您认为限制大于附加值,请不要使用它。每个图书馆都是如此。

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

    当构造函数被标记@Inject 注解时,它会做两件事:

    1. Dagger2 知道类依赖关系。
    2. Dagger2 知道如何实例化该类。

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

    这不能用于活动和片段,因为您无法控制它们何时被实例化。

    TL;DR

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

    【讨论】:

    • 谢谢,我设法克服了最初的困难并为 Dagger 创建了合适的模型 :)
    猜你喜欢
    • 2022-01-11
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多