依赖注入和状态设置

时间:2015-04-08 15:49:17

标签: dependency-injection

我想问一下谁负责设置注入依赖关系的状态?

例如,当A类依赖于B类时,实例A是设置实例B的责任还是应该在其他地方完成?为什么呢?

我的问题更为一般,但我在这里提出具体情况: 我有一个Context类来处理给定图表的交互和状态,例如你可以在两个系列之间切换。但是,这个类还通过将它们委托给其他(注入)类来设置图表的外观和显示数据。目前,Context构造函数根据其构造函数参数设置其依赖关系状态(例如:突出显示图表上的一个点,告诉要显示哪个系列等)。我不确定这种设计是否合适,并希望对正确的方法有更深入的了解。编程语言是Javascript(如果它很重要)。

谢谢, 彼得

1 个答案:

答案 0 :(得分:1)

  

当A类依赖于B类时,实例A是设置实例B的责任还是应该在其他地方完成?

如果A负责设置B,这将使A违反Dependency Inversion Principle(DIP)说:

  

高级模块不应该依赖于低级模块。两者都应该   取决于抽象。

DIP是依赖注入模式的驱动力。

但如果A不能负责创造B,那么谁呢?这个问题的答案是:Composition Root

  

组合根是应用程序中的(最好)唯一位置   模块组合在一起。

使用Composition Root是唯一可以让A和B(以及图中的其他所有内容)不依赖于不同模块的方法。