【发布时间】:2016-05-22 16:34:10
【问题描述】:
我在一个多模块项目中有多个注入器,并且想将一个已经注入的实例从模块 A 传递到另一个 Guice 模块 B:
//module B
bind(DeleteEmployeeUseCaseFactory.class).toInstance(useCaseFactories);
//usecaseFactories comes from module A, and already injected
但是,这会导致模块 B 中出现绑定异常,因为 guice 会尝试在未绑定这些依赖项的模块 B 中重新注入“usecaseFactories”成员。
为什么 guice 会尝试注入给定实例的成员,以及如何避免这种情况?
【问题讨论】:
-
你能发布更多关于异常的信息吗?尽管手动管理多个注射器(与创建子注射器相比)很少见,但我认为您所描述的内容不应该起作用。请记住,模块和注入器是不同的东西,Guice 不关心模块依赖关系,它关心注入器依赖关系。
-
谢谢,我的问题和这里描述的完全一样:github.com/google/guice/issues/751。模块是分开的,因为它们封装了它们内部的 DI 行为,只是通过接口(在本例中为 useCaseFactories)进行通信。也许不是最好的设计,但我没有一个例子可以在保持模块独立和干净的同时使用子注入器。
-
但是我用 Providers.of(..) 解决了我的问题。
-
听起来是一个很好的解决方案!我学到了一些新东西。您可能希望链接到大型自动注入 wiki 页面作为自我回答。