java - 牙签绑定(bind)相互依赖的模块

标签 java android dependency-injection toothpick-di

我正在试用 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/

相关文章:

php - 依赖注入(inject),几乎每个类都依赖于其他几个类

.net - 尝试创建实例时没有合适的构造函数

android - 如何使用 koin 依赖库在模块中注入(inject) Activity 上下文

使用交替时的 Java 正则表达式优先级

java - 如何同步两个异步任务?

android - 重新安装正在运行的android应用程序自己的APK然后重新启动应用程序?

java - 将多个微调器设置为默认值

java - ArrayList<HeavyOjbect> 克隆()

java - Java中void方法末尾的 "return;"对性能有任何影响吗?

Android Activity UI 持久化