在依赖注入中,要创建的对象在哪里?

时间:2013-02-28 14:24:56

标签: dependency-injection

如果它是由将其注入使用它的对象的类创建的,那么它不仅仅是将对象创建向上移动一步吗?并不意味着低级别类所需的所有对象都需要一次一个地传递给每个对象,直到它到达需要它的对象为止?

所有对象及其依赖关系都可以在一开始就设置,但是这些对象的性能不会在需要之前停留吗?

1 个答案:

答案 0 :(得分:2)

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

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

某些DI实现使用延迟加载来实例化其对象。 (也就是说,直到试图使用它实际实例化的对象)有些人没有。此外,您需要相当大的依赖关系图来降低性能。保证你的构造者简单快速(无论如何都是一个好习惯),这不会是一个问题,我向你保证。 DI容器非常聪明地释放不再使用的物体(同样,要特别注意生活方式/范围)。

我希望这会有所帮助。