在一个揭示模块中的依赖注入

时间:2015-05-22 22:16:22

标签: javascript unit-testing dependency-injection

我通常会创建我的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 或类似的东西?

1 个答案:

答案 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/

上看到更多示例