牙签绑定模块相互依赖



我正在尝试牙签DI库,但我似乎错过了一些关键的东西。

我在 github 上创建了以下测试项目,我试图为我的理解问题创建一个尽可能小的用例。

在那里,您将找到应用程序模块,我尝试在"根"模块中注入我需要的所有内容。正如您在那里看到的,我有两次scope.installModules(module),因为我的PlainPojo取决于Application实例。如果我不执行第一个installModule调用,则作用域中没有应用程序实例。如评论中所述,我可以将应用程序实例作为参数传递,但我认为在使用 DI 时可以删除它们?

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

假设成员上的@Inject足以在作用域中可用时自动注入它,并且绑定顺序足以使以前的绑定可用而无需在两者之间安装(如在ApplicationModule中所做的那样),我是否错了?

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

提前感谢!

牙签只有在创建依赖对象本身的实例时才能自动注入依赖关系(例如,它用@Singleton注释或类有直接绑定)。

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

你可以只使用

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

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

最新更新