Articles of dependency injection

如何解决nest.js中的DI问题?

我想了解如何通过DI在nestjs中导入第三方库。 所以,我有一个类AuthService : export class AuthService { constructor( @Inject(constants.JWT) private jsonWebToken: any, ){} …. } 智威汤逊提供商: import * as jwt from 'jsonwebtoken'; import {Module} from '@nestjs/common'; import constants from '../../../constants'; const jwtProvider = { provide: constants.JWT, useValue: jwt, }; @Module({ components: [jwtProvider], }) export class JWTProvider {} 库模块: import { Module } from '@nestjs/common'; import […]

NodeJS的dependency injection

TLDR – 在NodeJS(ES2015)中更加惯用,为什么? 导出类 ,稍后再实例化: foo.js: export default class Foo { } bar.js: export default class Bar { constructor(foo) { this.foo = foo; } } app.js: import Foo from './foo'; import Bar from './bar'; new Bar(new Foo()); 导出实例 – 有效地使它们都是单身人士: foo.js: class Foo { } export default new Foo(); bar.js: import foo from './foo'; class […]

针对node.js中的接口进行编程?

在C#和Java中,针对接口的dependency injection和编程是标准的。 我想知道这是否也可以在Node.js中实现? 例如,我编程一个内存caching模块,理想情况下,它应该暴露一个接口,让我们说两个方法getKey和putKey。 我可以有一个实现与ioredis和另一个只有普通的内存caching。 但是我的应用程序将只依赖于内存caching接口。

在节点js中构build可伸缩的tcp服务器

所以我不确定我的头衔是否是最准确的,但我试图给我最好的补偿。 我最近在面试中被问到这个问题(或多或less,因为我不记得完整的问题,这是我的头顶): 你需要制作一个简单的tcp服务器,可以通过puTTy(或其他任何客户端)访问。 一旦你进入,你需要写: login<用户名>(无所谓用户名)。 一旦你login,你可以做3个操作: showDevices – 将返回设备列表(目前我们有灯和空调) – 我们可以写模拟对象。 我们假设他们有一个数字ID。 切换<deviceId> <on | off> – 打开或closures设备。 SetValue <deviceId> <double> – 设置设备的范围值(空调温度) 重要的事: 分离 – 分离逻辑和通信层。 我们现在使用telenat服务器,但是我们希望将来可以切换到http服务器。 这个过程应该很容易。 可扩展性 – 我们目前有4个操作(login,showDevices,Switch,SetValue) – 编写服务器,以便其他程序员可以很容易地添加另一个操作。 代码应该是不言自明的 任务可以用任何语言书写。 我试图用C#编写,直到我被卡住,无法继续。 最近我更多地进入Node js,并决定再给这个…所以我问你们这个解决scheme一些有用的直接。 如何在通信和逻辑层之间最好地分离? 有什么样的devise模式,我应该实现添加命令更容易? (我看了一下命令devise模式,我不能想象这是否意味着这种情况) 任何能够让我走上正轨的东西(没有告诉我究竟该做什么)将不胜感激。 谢谢!

javascript:重构全局对象以require()模块

我想现代化我们的JavaScript架构 – 更重要的是,开始为我们的JavaScript代码编写unit testing。 我一直在从不同的问题/博客拼凑信息,并制定了一个试验性的计划。 但是,我真的不确定我是否正确。 计划: 将组件重构为导出的模块而不是全局对象。 创build一个需要()所有文件/组件的单个入口点(index.js?)。 用户Browserify创build我的浏览器兼容的静态文件(回到全球)。 使用node,mocha和chai,运行npm test来执行引用可导出组件的testing。 重构: 全局对象: // myProject.js // ——————– var MyProject = {}; // component1.js // ——————– myProject.component1 = {}; 要求()模块: // myProject.js // ——————– var component1 = require('./component1'); modules.export = { component1 }; // component1.js // ——————– var component1 = {}; modules.exports = component1; 问题: […]

在node.js中使用带有Repository模式的SQL Server和mongodb

我尝试在expressJS中使用存储库模式实现dependency injection。 我想要使​​用两个不同的存储库types(mongodb和SQL Server)来实现,但只有一个控制器。 当应用程序启动时,我应该select一个由应用程序使用的存储库types(例如SQL Server存储库)。 所以我不想为每个存储库types创build不同的控制器。 我怎样才能做到这一点? 有什么build议吗?

模拟Node中的依赖(主要是unit testing)

在提出问题之前search了一会儿。 文件结构: . |____lib | |____bar.js | |____baz.js | |____foo.js |____test | |____bar.js | |____baz.js | |____foo.js 用例: 关于上述文件结构,./ ./lib/foo.js需要./lib/bar.js需要./lib/baz.js 。 当通过./test/foo.jsunit testing./lib/foo.js ,我想模拟./lib/bar.js ,所以我只关心./lib/foo.js 。 一旦./test/foo.js中的testing结束,我想重置/取消模拟./lib/bar.js 。 当unit testing./lib/bar.js通过./test/bar.js ,我想模拟./lib/baz.js ,所以,我只关心./lib/baz.js 。 一旦./test/foo.js中的testing结束,我想重置/取消模拟./lib/baz.js 。 等等等等。 或换句话说,我想嘲笑依赖关系,并在需要时重置在testing文件中。 最有可能在testing文件中嘲笑好几次,然后在testing文件中完成所有的testing。 或者可能是我可以控制本地模拟,一些文件级别closuresvariables 下面提到的StackOverflow的post有很好的讨论,但我不能得出任何结论。 嘲笑Node中的依赖关系 在NodeJS中是否需要dependency injection,或者如何处理…? 我碰到以下模块 蔑视 n芯 horaa 沙盒模块 火起来 一个 proxyquire 换铁线 和其他几个 。 其中,看起来像嘲笑解决我的用例,主要是重置/取消嘲笑嘲笑的依赖 […]

如何避免使用dependency injection时使用types检查逻辑填充我的JavaScript代码?

我试图在Node.js应用程序中使用从强types语言学习的SOLID原则,并通过模块中的构造函数实现dependency injection。 没有一个编译器来帮助我,我发现自己冲动地写了types检查和空引用检查逻辑,以确保正确types的依赖关系被传入。 var _ = require('lodash'); var ExampleModule = function(dependencies) { var app, express, http; if(_.isUndefined(dependencies) || typeof dependencies !== 'object') { throw new ReferenceError('No dependencies object passed to the constructor. Actually passed: ' + typeof dependencies); } if(_.isUndefined(dependencies.express)) { throw new ReferenceError('The express module must be passed as the \'express\' property in the […]

使用dependency injection在javascript中返回一个函数

有没有办法在javascript中返回一个函数而不调用它,但仍然指定参数? 我正在使用node.js在JavaScript中简单模仿angular的dependency injection系统 – inject()方法如下所示: var injectedFunction = module.inject(function (funcToRegister) { return funcToRegister(); }); 而module.inject()函数如下所示: var inject = function(func) { var args = resolveDependencies(func); // so 'args' is an array of function dependencies, like [Function: funcToRegister] return func.apply(null,args); // not sure how to correctly return this function! }; 目前我不知道如何返回函数与其更新的依赖项(作为参数),而不实际调用它,或只是返回一个空对象。 有任何想法吗? 谢谢!

Javascriptdependency injection和节点中的DIP:require vs构造函数注入

我是来自.NET世界的NodeJs开发新手,我正在search网页中的最佳实践,重新调整Javascript中的DI / DIP 在.NET中,我将声明我的依赖在构造函数,而在JavaScript中,我看到一个常见的模式是通过一个require语句在模块级别声明依赖关系。 对我来说,它看起来像当我使用要求我被耦合到一个特定的文件,而使用构造函数来接收我的依赖是更加灵活。 你会推荐做什么,作为在JavaScript的最佳做法? (我正在寻找build筑模式,而不是国际奥委会的技术解决scheme) searchnetworking我来到这个博客文章(这在评论中有一些非常有趣的讨论): https : //blog.risingstack.com/dependency-injection-in-node-js/ 它总结我的冲突相当不错。 这里有一些来自博客文章的代码,让你明白我在说什么: // team.js var User = require('./user'); function getTeam(teamId) { return User.find({teamId: teamId}); } module.exports.getTeam = getTeam; 一个简单的testing看起来像这样: // team.spec.js var Team = require('./team'); var User = require('./user'); describe('Team', function() { it('#getTeam', function* () { var users = [{id: 1, id: 2}]; this.sandbox.stub(User, […]