5

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

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

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

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

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

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

提前致谢!

4

1 回答 1

2

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

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

你可以使用

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

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

于 2018-01-19T11:48:12.743 回答