牙签绑定彼此依赖的模块

时间:2018-01-17 09:56:43

标签: java android dependency-injection toothpick-di

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

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

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

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

我错误地认为成员上的@Inject足以在范围内可用时自动注入它,并且绑定的顺序足以使先前的绑定可用而无需在其间安装(就像在ApplicationModule中完成的那样?)

如果我可以提供更多信息以使我的问题可以理解,请发表评论。

提前致谢!

1 个答案:

答案 0 :(得分:2)

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

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

你可以使用

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

如果需要,也可以将它们作为单身人士。