揭示模块中的依赖注入

档案

我通常以以下方式创建我的javascript“控制器”:

var module = (function(){

    function init(someService){
        someService.doSomething();
    }

    return {
        init: init
    };

})();
module.init(SomeService);

我刚刚偶然发现了javascript中的依赖注入(例如JavaScript Dependency Injection)。

从测试的角度来看,我想知道的是,Injector在我的链接中使用in注入模拟等有什么优势,而不是init像我上面那样简单地传递它们来实现

详细地说,SomeService今天我初始化测试时可以通过一个模拟。那么我有没有必要使用Injector或类似的东西?

伍特

您已经在进行依赖注入。无需在模块中初始化someService,而是将其传递到init方法中。这正是依赖注入的意义所在!

这些优点之一是测试的简便性,因为您只需注入someService的模拟即可(正如您已经说过的那样)。

注入器/依赖注入容器的使用是为了管理所有这些依赖。想象有更多的模块,所有模块都具有依赖性。管理所有这些类的初始化将很快成为一场噩梦。

那就是容器的介入,再次使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/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章