问题标签 [inversifyjs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
239 浏览

javascript - 将特定值注入对象构造函数

我有几个接口的实现,它们每个都需要将自己的配置注入到构造函数中。我的问题是我是否可以以某种方式挂钩 NestJS(可能是 Inversify)中的依赖注入系统,以注入不仅是配置对象,而且是配置对象的特定子集。例如,如果config.ts看起来像这样:

我想以我的磁盘实现接收config.adapters.disk、我的保管箱实现接收config.adapters.dropbox等的方式注入配置,而不仅仅是config

0 投票
0 回答
194 浏览

mongodb - 在 expressjs、mongodb、inversifyjs 中的 db 操作回调之前获得 204 响应

我想将新文档添加到 mongodb 并获得一个插入的 id 作为具有 201 状态的响应,但是当 db.insertOne 调用时,我在点击工作之前得到带有 204 状态代码的响应。这是我的控制器

在我的 StarService

在 MongoDBClient 中

如何获得具有正确状态代码和正文的 json 响应

0 投票
2 回答
1109 浏览

typescript - 如何使用 Inversify + inversify-express-utils 实现 Controller 的组件扫描/自动发现

我正在寻找一种在 Inversify 中加载我的控制器类的方法,这些控制器类使用 from 进行注释,@controller()inversify-express-utils无需管理手工制作/手动构建的导入/导出模块。

我看到的所有示例似乎都表明,在您的入口文件中,您需要显式地导入每个控制器,以便inversify-express-utils获取@controller注释,但是对于中型到大型的应用程序来说,这感觉相当乏味。

在纯 JavaScript 中,我会在运行时递归地要求目录中的每个文件,但是我知道由于 TypeScript 的工作方式,这不是完全可能的吗?

使用该inversify-binding-decorators包,我可以简单地注释服务,@provide()这似乎足以将类添加到 IOC 容器中,但这似乎不足以inversify-express-utils发现@controller()类上的注释。

有没有办法实现这些@controller()带注释的类的自动发现,而无需手动将它们导入入口文件?

/services/StarwarsNamesService.ts

/controllers/StarWarsNamesController.ts

boostrap.ts

抛出错误:

0 投票
1 回答
256 浏览

javascript - inRequestScope 未按预期工作

帮助使用 inRequestScope inversifyJS 例如:

我希望在第二次调用 get 时返回相同的实例,而不是再次实例化它

0 投票
1 回答
385 浏览

node.js - 无法导入导出的函数

当我从导出文件的文件中导入内容时,我遇到了 Typescript 的奇怪问题。有时我会导出一个函数,然后将其导入另一个文件,然后我使用该函数,它不再是一个函数。当我在同一个文件中定义函数时,突然函数是函数?!?!?

为什么一个函数在导出时会不再是一个函数?我在课堂上也遇到过类似的问题。

这个问题的难点在于我无法重新创建一个简单的示例,因为它仅在我使用某种更高级别的包时才会发生。

例如,我在这里遇到了与 sequelize-typescript 类似的问题:my github issue with typescript-sequelize

下面是一些代码,展示了我在使用 InversifyJS 的装饰器之一时遇到的基本问题。

容器.ts

测试服务.ts

最奇怪的是,当我将 与provideSingleton放在同一个文件中时TestService,一切正常!?!?!

基本上要重新创建问题,只需按照此处的示例进行操作:inversify-binding-decorators - Using @provideFluent multiple times。但是这个例子有一个问题,所以请看这个问题:fluentProvide example required。以上provideSingleton反映了该问题的变化。然后您只需从另一个文件中导入该provideSingleton函数,而不是像示例中那样定义它。

谁能向我解释我错过了什么?为什么哦,为什么某些出口项目不会被视为它们的类型?有没有我没有看到 NodeJS 采取的步骤来使项目实际导出并因此有所不同?我可以强制函数解析为函数,以便可以这样使用吗?

环境:
NodeJS:10.9.0
打字稿:3.0.1
Mac:10.13.16

0 投票
1 回答
2491 浏览

typescript - Babel 7 + Inversify 4 + WebPack 4 - @inject 上的意外字符'@'

我有一个使用Inversify的打字稿 Vue SPA 项目。

我使用awesome-typescript-loader来编译我的 typescript 源代码;现在我想切换到Babel,但是当我编译我的应用程序webpack时会引发这个错误:

模块解析失败:意外字符 '@' (38:25) 您可能需要
适当的加载程序来处理此文件类型。
| _inherits(ReportService, _BaseService);
| > 函数 ReportService(@inject(TYPES.Urls)
| urls) {
| 变量 _this;
@ ./app/Ioc/container.ts 6:0-54 14:39-52
@ ./app/startup.ts

.babelrc

tsconfig.json

webpack.config.js

如果我使用链接到babel-loader的 awesome-typescript -loader

并删除不必要的 babel 插件并预设它可以工作。

0 投票
0 回答
594 浏览

node.js - 使用装饰器注入类时测试失败

这可能是我的环境问题,但我在测试使用装饰器的注入类时遇到问题。

我希望有人能看到我所缺少的。

注意:当我运行代码时,它运行良好。该错误仅在运行笑话测试时发生。我有一个运行良好的完整测试套件。当我删除装饰器注释并且不再具有类时,失败的测试通过了 extend EventEmitter

我也ts-node用来运行代码。我用ts-node ./node_modules/.bin/jest src/event-emitter-inversify/__tests__/event-emitter-inversify.test.ts

我不确定为什么测试失败并且运行成功。

我一直在测试中看到错误TypeError: Cannot read property 'constructor' of null

这是设置。

事件发射器-inversify.ts

事件发射器反转-dependent.ts

run.ts (运行良好!)

event-emitter-inversify.test.ts (失败)

我运行测试:

它失败了:

堆栈跟踪

关于我错过了什么或做错了什么的任何想法?

0 投票
1 回答
410 浏览

angular - 为构造函数注入反转组合根

我来自 c# 背景。我是 Angular 6 的新手。我了解到对于 DI 有类似于 ninject 的库。反转。我试图在应用程序中使用它。

我确实配置了绑定和类型。

类型.ts

绑定.ts

还有我正在注入 APPService 的班级

模块.ts

编译成功。但我得到运行时错误Can't resolve all parameters for SummaryApp

这意味着 inversify 无法解决依赖关系。我看到很多例子,人们使用服务定位器解决了依赖问题。但我觉得它的反模式。我在哪里可以得到 inversify 容器的组合根?

0 投票
1 回答
1419 浏览

javascript - 反转 toFactory 与 toDynamicValue

这个相关问题显示了文档中的示例,但没有解释 InversifyJStoFactorytoDynamicValue

toDynamicValue接受工厂函数,同时toFactory接受高阶工厂函数。但toDynamicValue也可以将工厂函数作为值返回。

他们能达到相同的目的吗?他们的行为又有何不同?

在这个例子中有何Bar不同?Baz

0 投票
0 回答
559 浏览

node.js - 如何使用外观设计模式在nodejs中汇集postgresql连接?

您好,我正在使用类似于外观设计模式的设计编写简单的 Web 应用程序。应用程序是使用 nodejs、expressjs、node-postres 和 inversify 用 Typescript 编写的。假设我有这个简单的例子

路由器.ts

测试控制器.ts

测试UC.ts

测试管理器1.ts

测试Sql1.ts

PostgresClient.ts

TestManager2.ts 和 TestSql2.ts 与 TestManager1.ts 和 TestSql1.ts 基本相同

我的问题是每个请求似乎只使用来自池的一个相同的 postgresql 连接(用 JMeter 测试)并序列化所有 api 请求。Pool 甚至不会创建到 postgresql 的其他连接。看起来其他请求正在等待先前的请求结束或 postgresql 连接释放。

如何使用 node-postgres 池为每个请求实例化一个连接(事务),同时不阻止其他请求?

这段代码是阻塞的吗?或者我误解了文档中的某些内容?或者只是这种设计不适合 nodejs?我现在真的没有,并且坚持了一周。