1

如果它是由将它注入到使用它的对象中的类创建的,那么它不只是将对象创建移到堆栈上一步吗?这是否意味着较低级别的类需要的所有对象都需要一次通过每个对象,直到它到达需要它的对象?

所有对象及其依赖项都可以在一开始就设置好,但是这会不会降低性能,因为对象会一直闲置直到需要?

4

1 回答 1

2

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

有多种方法可以注入您的依赖项。就我而言,我到处都使用构造函数注入。使用此方法,如果较低级别的类需要依赖项,它只需将该依赖项的接口放在其构造函数中。无需从堆栈中更高的类传递。如果您在两个类中需要相同的实例,那么您应该查看在将依赖项注册到容器时的生活方式/范围,以便两个类碰巧传递相同的实例。

一些 DI 实现使用延迟加载来实例化它们的对象。(即,直到尝试使用该对象才实际实例化它)有些没有。此外,您将需要相当大的依赖关系图来降低性能。我向你保证,让你的构造函数保持简单和快速(无论如何都是一个好习惯),这不会是一个问题。DI 容器在释放不再使用的对象方面很聪明(同样,要特别注意生活方式/范围)。

我希望这有帮助。

于 2013-02-28T14:53:55.367 回答