我正在试用 toothpick DI 库,我似乎错过了一些关键的东西。
我创建了以下 test project on github我试图为我的理解问题制作一个尽可能小的用例。
在那里你会找到ApplicationModule我尝试在我的“根”模块中注入(inject)我需要的一切。如您所见,我有两次 scope.installModules(module)
因为我的 PlainPojo
依赖于 Application
实例。如果我不执行第一个 installModule
调用,则范围内没有应用程序实例。如评论中所述,我可以将应用程序实例作为参数传递,但我认为我可以在使用 DI 时删除它们?
引起麻烦的第二类是 SimpleTest类(class)。如果我不在构造函数中调用 inject()
方法,则不会注入(inject) PlainPojo 成员。在绑定(bind) PlainPojo 之后,我还尝试在 ApplicationModule
中第三次使用 installModules()
但这没有帮助。
我是否错误地假设一个成员上的 @Inject
足以在它在范围内可用时自动注入(inject)它,并且绑定(bind)的顺序足以使以前的绑定(bind)可用而无需在两者之间安装(就像在 ApplicationModule
中完成的那样)?
如果我可以提供更多信息以使我的问题易于理解,请发表评论。
提前致谢!
最佳答案
Toothpick 只能在它自己创建依赖对象的实例时自动注入(inject)依赖项(例如它被@Singleton 注释或者有一个类的直接绑定(bind))。
否则您必须手动调用 Toothpick.inject,就像您在 SimpleTest 中所做的那样。 TP无法知道你何时调用了PlainPojo的构造函数。
你可以直接使用
module.bind(PlainPojo.class);
module.bind(SimpleTest.class);
如果需要,可能将它们作为单例。
关于java - 牙签绑定(bind)相互依赖的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48298189/