AngularJS依赖注入

3

我是angularjs的初学者,我通过他们的教程开始学习,但是当涉及到依赖注入时,我不太明白它的含义。

function SomeClass(greeter) {
  this.greeter = greeter;
}

SomeClass.prototype.doSomething = function(name) {
  this.greeter.greet(name);
}

在上面的例子中,SomeClass不关心创建或定位greeter依赖项,只是在实例化时传递了greeter。
这是可取的,但它把获取依赖项的责任放在构造SomeClass的代码上。
粗体句子实际上是什么意思?
“构造SomeClass的代码”指的是函数SomeClass(greeter)吗?
感谢大家的建议。

3
我认为这意味着var some = new SomeClass(greeterInstance)。因此,这段代码的责任是提供一个适当的greeterInstance对象来实现greeter接口。 - dfsq
1
@dfsq 的解释是完全正确的。反过来说:如果你的 greeterInstance 不符合 Greeter 接口(例如 greet 方法),some.doSomething() 将会抛出一个错误。这种紧密耦合就是 DI 解决的问题。 - Zhonk
请查看:http://stackoverflow.com/questions/23494233/need-to-understand-dependency-injection-in-angular-js - Siddharth_Vyas
@dfsq 完全明白,感谢您精彩的解释!清晰易懂。 - user2499325
1个回答

1
不,function SomeClass(greeter) 是一个构造函数。
在这个上下文中构造 SomeClass 的代码是任何执行的代码(大致如此)。
var greeter = new Greeter();
var someInstance = new SomeClass(greeter);

这通常在DI框架代码中的某个地方。

底部只是Javascript类中声明成员函数的(几种方法之一)。

SomeClass.prototype.doSomething = function(name) {
  this.greeter.greet(name);
}

那只是确保每个SomeClass实例都有一个doSomething函数。对于解释DI的目的来说,这部分完全无关紧要。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接