我通常会创建我的javascript"控制器"通过以下方式:
module.init(SomeService);
Injector
我在javascript中偶然发现了依赖注入(例如JavaScript Dependency Injection)。
我想知道的是,从测试的角度来看,使用我的链接中的init
注入模拟等有什么好处,而不是简单地传递SomeService
函数就像我上面做的那样。
详细说明,我今天初始化测试时可以通过Injector
模拟。那么我有没有必要使用└> cat hello.py
class Hello:
def hello(self):
print "hello"
└> python -c 'from hello import Hello; h= Hello(); h.hello()'
hello
└> python -c 'import hello; h= hello.Hello(); h.hello()'
hello
或类似的东西?
答案 0 :(得分:4)
您已经在进行依赖注入。您不是在模块中初始化某个服务,而是将其传递给init
方法。这正是依赖注入的意义所在!
其中一个优点是测试的简便性,因为你可以注入一些服务的模拟(如你所说)。
使用注入器/依赖注入容器是为了管理所有这些依赖关系。想象一下,有更多的模块,都有他们的依赖。很快就会成为管理所有这些类的初始化的噩梦。
这是容器的步骤,让DI再次成为欢乐。
所以要回答你的问题,如果这是你所拥有的所有代码,那么就没有必要使用注射器/容器了。
// the Module object
var Module = function (someService) {
this.someService = someService;
};
Module.prototype.do = function () {
this.someService.doSomething();
};
// configuring the injector
Injector.add('someService', new SomeService());
// retrieving the module instance with the SomeService being injected
var module = Injector.get(Module);
module.do();
可以在http://www.yusufaytas.com/dependency-injection-in-javascript/
上看到更多示例