我正在MATLAB中编写一个中型分析程序(5-10kloc)(不是我的决定),我正在尝试使用依赖注入来使我的代码更易于测试.我想我理解基本的对象/构造函数注入模型,但我对如何扩展依赖图感到困惑.
例如,如果我有一个对象A,它有一个对象B,它有一个对象C,而对象C有一个需要注入的依赖项,我是否需要将它传递给整个链?最终,由于这是一个数据分析程序,所有内容基本上都会回到一个AnalyzeData对象/方法,这是否意味着该对象必须注入整个程序的所有依赖项?
也许答案只是在这种情况下使用ServiceFactory/ServiceProvider,但我想知道是否可以在没有框架的情况下将许多依赖项扩展到大型对象图.
此外,鼓励对我的思维/措辞/基本原理进行更正 - 我基本上通过Google/HN/SO学习了大部分内容.
Matlab不可知的答案:
如果(A需要B)和(B需要C)那么你首先创建C,然后创建B并将C传递给B.然后你创建A并传递(B有C)到A.
现在,如果C需要注入依赖项,将其称为D,您仍然可以使用setter注入在此事件序列之后执行此操作.如果依赖项对于C是可选的,则会出现这种情况.否则,在程序初始化中可能存在缺陷,即C 在传递给B 之前未向D注入.
如果你想使用构造函数注入将D注入到C之后(A有(B有C)),那么你将不得不使用setter注入将一个新的(C有D)传递给B,但是这个序列事件通常不是DI的有效方案.