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