2013-02-28 51 views
1

如果它是由将它注入到使用它的对象的类中创建的,那么是不是只是将对象创建移动到堆栈上一步?这是否意味着低级别类所需的所有对象都需要一次一个地传递给每个对象,直到它到达需要它的对象?在依赖注入中哪里是要创建的注入对象?

所有对象及其依赖关系都可以在一开始就设置好,但是不会出现这种凹痕性能,因为对象会一直悬挂到需要时为止?

回答

2

是的,它将对象实例化到堆栈上。但它正在将它向上移动到一个可以更好地决定实际使用哪个实现的地方。如果我想用一个stubbed版本替换我的数据访问层来执行业务逻辑的性能测试,那么我可以不更改业务逻辑代码的一行。

有可能注入您的依赖关系的方法。就我而言,我在任何地方都使用构造函数注入。使用这种方法,如果较低级别的类需要依赖关系,它只是将该依赖关系的接口放入其构造函数中。无需从堆叠中的更高级别传球。如果您需要两个类中的同一个实例,那么您应该查看将依赖项注册到容器时的生活方式/范围,以便两个类恰好通过相同的实例。

一些DI实现使用延迟加载来实例化其对象。 (即,直到试图使用该对象以使其实际被实例化)。有些不这样做。此外,您需要相当大的依赖关系图来降低性能。保持你的构造器简单快捷(无论如何都是一个很好的练习),这不会是一个问题,我向你保证。 DI容器在释放不再使用的物体时非常聪明(再次,要特别注意生活方式/范围)。

我希望这会有所帮助。

+0

+10。 。 。 。 。 。 – Steven 2013-02-28 23:00:43

+0

不知道该评论@Steve怎么看。 (还有很多最后票。)我的答案是否令人困惑?任何特定领域需要澄清? – TylerOhlsen 2013-02-28 23:18:23

+0

+10意味着我完全同意你的观点,如果可以的话,我会给予10个高分。 – Steven 2013-02-28 23:23:03