繁体   English   中英

揭示模块中的依赖注入

[英]Dependency injection in a revealing module

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

var module = (function(){

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

    return {
        init: init
    };

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

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

从测试的角度来看,我想知道的是,在我的链接中使用Injector来注入模拟等有什么优势,而不是像我上面那样简单地将其传递给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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM