Articles of dependency injection

如何创build一个可重用的Socket.IO模块

我有创build一个暴露我的Socket.IO库function的模块的麻烦: const sio = require('socket.io'); module.exports = function(server) { const io = sio(server); return { register: function(namespace) { let nsp = io.of(namespace); nsp.on('connect', function(socket) { // … } } } } 现在的问题是如何在其他模块中使用这个? 在我的app.js 我使用Express创buildserver ,并可以使用require('./mysocketio')(server)实例化模块,但不能在其他模块中使用,因为服务器在那里不可用。 什么是解决这些循环依赖的好方法?

NodeJS和Javascript(requirejs)dependency injection

我目前使用requirejs来pipe理模块js / css的依赖。 我想通过一个集中的configuration文件来发现有节点做这个的可能性。 所以,而不是手动做类似的东西 define([ 'jquery' 'lib/somelib' 'views/someview'] 在每个模块内。 我会有节点注入依赖关系即 require('moduleA').setDeps('jquery','lib/somelib','views/someview') 无论如何,我感兴趣的任何项目在dependency injection节点。 谢谢

dependency injection库 – 重命名注入的值

我想按名称注入lodash,如下所示: let val = function(lodash){ // lodash will be injected, simply by using require('lodash'); }; 但是说我想重命名导入,我想要做这样的事情: let val = function({lodash:_}){ }; 要么 let val = function(lodash as _){ }; 有没有办法做到这一点与ES6 / ES7 / ES8或TypeScript? 请注意,这个DI框架比只需要('x')做更多的工作…它将尝试注入其他值首先,如果没有其他的存在,那么它将尝试要求的价值。 还要注意,这里的要求是,当你调用val.toString()时,“lodash”将被视为参数名称。 但是在函数体内的运行时会看到_而不是lodash。 这是因为为了注入lodash,我们调用fn.toString()来获取参数名称。

存根Date.now()和Math.random()

我正在用Sinon使用Mocha来testing我的node.js模块。 我已经成功地嘲笑了其他的依赖(我写的其他模块),但是我遇到了困扰非纯函数(如Math.random()和Date.now() )的问题。 我已经尝试了以下(简化,以便这个问题不是如此本地化),但Math.random()不存在,因为一个明显的范围问题。 Math的实例在testing文件和mymodule.js之间是独立的。 test.js var sinon = require('sinon'), mymodule = require('./mymodule.js'), other = require('./other.js'); describe('MyModule', function() { describe('funcThatDependsOnRandom', function() { it('should call other.otherFunc with a random num when no num provided', function() { sinon.mock(other).expects('otherFunc').withArgs(0.5).once(); sinon.stub(Math, 'random').returns(0.5); funcThatDependsOnRandom(); // called with no args, so should call // other.otherFunc with random num other.verify(); // ensure […]

分叉一个subprocess并注入依赖

我目前有一个模块是阻塞的操作,所以我正在考虑把它变成一个subprocess,而不是叉。 如果我想这样做,那么我当然需要修改我的模块的架构。 该模块要求dependency injection通过调用模块作为一个函数,传入依赖关系,如下所示: var dependency = { name: "Bob" } require('worker')(dependency) 然后在我的worker模块中: module.exports = function (dependency) { // Outputs { name: "Bob" } console.log(dependency) } 我怎样才能把这个例子变成一个分叉的subprocess呢?