【问题标题】:Toothpick bind modules that depends on each other牙签绑定相互依赖的模块
【发布时间】:2018-01-17 09:56:43
【问题描述】:

我正在试用牙签 DI 库,但我似乎错过了一些重要的东西。

我创建了以下test project on github,在其中我尝试为我的理解问题创建一个尽可能小的用例。

在那里你会找到ApplicationModule 我尝试在我的“根”模块中注入我需要的一切。如您所见,我有两次scope.installModules(module),因为我的PlainPojo 依赖于Application 实例。如果我不进行第一次installModule 调用,则范围内没有应用程序实例。正如评论中提到的,我可以将应用程序实例作为参数传递,但我认为我可以在使用 DI 时删除它们?

引起麻烦的第二个类是SimpleTest 类。如果我没有在构造函数中调用inject() 方法,则不会注入PlainPojo 成员。在绑定PlainPojo后,我还尝试在ApplicationModule中第三次使用installModules(),但这没有帮助。

假设成员上的 @Inject 足以在范围内可用时自动注入它并且绑定顺序足以使以前的绑定可用而无需在两者之间安装(如完成在ApplicationModule)?

如果我可以提供更多内容以使我的问题易于理解,请发表评论。

提前致谢!

【问题讨论】:

    标签: java android dependency-injection toothpick-di


    【解决方案1】:

    Toothpick 只能在创建依赖对象本身的实例时自动注入依赖项(例如,它带有 @Singleton 注释或类的直接绑定)。

    否则,您必须手动调用 Toothpick.inject,就像在 SimpleTest 中一样。当你调用 PlainPojo 的构造函数时,TP 无法知道。

    你可以使用

    module.bind(PlainPojo.class);
    module.bind(SimpleTest.class);
    

    如果需要,也可以将它们限定为单例。

    【讨论】:

      猜你喜欢
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 2021-10-17
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多