【发布时间】:2014-05-23 16:56:34
【问题描述】:
我读到了DI 和DI in Angular.js。
据我了解,Angular.js 中的 DI 意味着 Angular.js 允许控制器、工厂、服务或其他人指定依赖项,而无需创建依赖项。
问题:
- 在某些时候必须创建依赖项,使得创建依赖项的地方没有被 DIed,我怎么理解这个?
-
如果我有怎么办:
var thing = function(dep){ this.dep = dep || new depCreator(); }这是死了吗?还是取决于
dep是否传递给函数? -
据我所知,DI 意味着允许设置依赖项,无论是在函数还是对象中,最后,是否意味着将初始化/配置/数据与程序的其他部分分开(逻辑?虽然我们可以也有初始化逻辑)?:
var dep1 = 'qwe'; var thing = function(dep){ this.dep = dep; } var diedThing = new thing(dep1);例如,这将允许在配置文件中设置
dep1。 -
如果实现 DI 的纯 JavaScript 是:
var thing = function(dep){ this.dep = dep; }而不是
var thing = function(){ this.dep = new depCreator(); }这样对吗?
但是如果 depCreator 依赖于配置文件(或提取的配置),这会被 DI 吗?
当我读到 Angular.js 有(?)DI 时,认为这个 DI 意味着 Angular.js 为我创建和搜索依赖项是否正确?还有什么意思吗?
最后,如果 DI 这么复杂,只是意味着将配置与实现(或逻辑?)分开,为什么不称其为单一职责原则,即方法做什么方法做什么,配置做什么配置,等等。
最后,DI对我来说是一个主观的概念,你是如何想象和在一些应用中划分职责的,这是否接近正确?
抱歉问题太长了。
【问题讨论】:
-
一般来说
DI只是一个花哨的名字,说Pass the reference and you will get all methods available in the object.更像是委托模式。 -
那种 DI 只是使用函数的形式参数作为有意义的非局部标识符,将参数名称与 $scope 等常见角度对象中的属性匹配。任何嗅探到的匹配都会添加到调用该函数的“apply() 数组”中。
标签: javascript angularjs design-patterns dependency-injection