我想就如何为具有下述结构的系统构造依赖注入的最佳方法提出一些建议和反馈。我使用的是Guice,因此宁愿以基于注解的声明为中心的解决方案,而不是XML重型的Spring风格的配置。依赖注入的正确结构(使用Guice)
考虑一组类似的对象Ball, Box, and Tube
,每个对象都依赖于Logger
,通过构造函数提供。 (这可能并不重要,但所有四个类别碰巧都是单例 - 应用程序,而不是四人帮,多种。)
A ToyChest
类负责创建和管理三个形状对象。 ToyChest
本身不依赖于Logger
,除了创建形状对象。
ToyChest
类被实例化为Main
类中的应用程序单例。
我对构建ToyChest
中形状的最佳方法感到困惑。我要么(1)需要访问Guice Injector
实例已附加到Module
绑定Logger
实施或(2)需要创建一个新的Injector
附加到正确的Module
。
(1)通过添加@Inject Injector injector
场ToyChest
完成,但这种感觉怪怪的,因为ToyChest
实际上并没有任何直接的依赖---只有那些它实例的孩子。 (2),我不知道如何通过适当的Module
。
我在正确的轨道上吗?有没有更好的方法来构造这个?
对此question的回答提到通过Provider
而不是直接使用喷射器,但我不确定应该如何工作。
编辑:
也许更简单的问题是:使用吉斯时,这里是构建形状的物体的适当位置? ToyChest
会与他们做一些配置,但我想他们可以在别处构建。 ToyChest
(作为管理它们的容器),而不是Main
,在我看来,就像构建它们的适当位置。
Ball,Box和Tube都是应用程序单例,但它们是由ToyChest创建的?你能澄清为什么需要这样吗? ToyChest可以在建造时分配给他们吗? –
1)ToyChest决定创建哪个。 2)他们可以通过构造函数传递给ToyChest,但在其他地方不需要它们。这样(在我看来)会不必要地使构造者复杂化。还有一个全乌龟的问题。是什么使他们传递给ToyChest?也许通过构造函数传递它们是正确的,我只是没有看到更大的结构。 –