问题标签 [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 回答
1429 浏览

node.js - InversifyJS:从容器中检索对象时出错

我正在使用 InversifyJS 设置某种动态绑定并在 NodeJS 上运行它。我遇到的问题是我收到错误,但没有消息,只有堆栈跟踪。

Main班级_

此类KeyFeatureContainer使用json字符串调用 ,用于配置所有绑定(以某种动态方式),然后检索容器。

KeyFeatureContainer班级_

此类接收json配置并加载,遵循一个 ID,ContainerModule其中包含接口和具体实现之间的绑定。rootContainer指定要在ContainerModuleID 之后检索的。

rootContainer

以及相关ContainerModule的s(第二个是相同的,只是每个不同的PARAMS)

最后,ServiceIdentifiers用于设置整个(分隔文件)

最后是JSON输入(为方便起见格式化)

我使用一个简单的Test脚本来输出值并查看所有绑定是否正确完成

但我最终得到了这个错误

没有关于发生了什么的线索,我无法弄清楚我做错了什么。我不能get<Calculator>也不get<KeyFeature>,但如果我这样做:

同样适用于所有绑定项目。

感谢您的任何指点,我没有想法。

编辑:忘记了KeyFeatureCalculator

此外,我所有的文件(或几乎)都导入inject, injectableinversify导入reflect-metadata

0 投票
1 回答
1602 浏览

reactjs - 没有打字稿的 React 中的 IoC

我对 React 还是很陌生,我基本上会有一个服务(一个实例),我可以以某种方式注入并在多个 React 组件中使用它。

到目前为止,我通过谷歌搜索遇到的选项是:

  • 使用 React 的上下文,但不推荐,因为它是一个未记录的 API。
  • 在 props 中传递对象,从组件到组件,但感觉有点不优雅和乏味
  • 使用 IoC 容器,例如 inversifyJS,看起来很棒,只是它依赖于 typescript,我不希望用 typescript 编写我的 React 应用程序。

现在,Inversify 显然可以在 vanilla JS 中使用inversify-vanillajs-helpers,但是当我尝试在 React 中使用它来解析组件(我的App组件)时,它一直抛出异常说明

“缺少必需的 @injectable 注释:ReactComponent”

所以,我试图找出一种方法来获取我的服务实例(在使用它的几个组件之间共享相同的实例),或者通过使用 React 但没有打字稿,或者我没有的新方法还没有探索。

有任何想法吗 ?

0 投票
1 回答
1589 浏览

inversifyjs - inversify:不可注入的contrustor参数

我有一个 Game 类和一个 Multiplayer 类,它们为定义的游戏处理所有网络玩家的东西:

反转配置:

现在我想创建、配置和运行游戏,然后 - 运行多人游戏。

但是我应该如何将游戏实例传递给Multiplayer构造函数?如果我将@injectWebSocketMultiplayer构造函数中使用,它将创建另一个游戏实例。

我现在使用的临时解决方案是在多人启动功能中传递游戏实例

但是它应该如何使用 Inversify 来完成?

0 投票
0 回答
868 浏览

node.js - 使用 Mocha 测试 Inversify 会导致奇怪的错误 ERROR_MSGS.NULL_ARGUMENT

当我尝试使用 Mocha/Chai 测试我的代码时出现以下错误。
有没有其他人看到这个错误?

当我尝试在测试代码中新建类时会出现问题。

0 投票
1 回答
3292 浏览

typescript - 依赖注入:注入 NPM 模块的推荐模式

我想使用 Inversify 删除对 NPM 模块的硬依赖,并将它们作为构造函数参数注入。在我试一试之前,这似乎会简单得多。

事实证明,大多数DefiniteTyped 模块都不会费心导出接口,而当它们导出接口时,它们很少包含代表整个模块的接口。此外,当一个类被导出时,我仍然需要为该类手动定义一个构造函数接口。

这意味着我必须为几乎每个模块做这样的事情:

有什么办法可以简化其中的一些吗?注入 NPM 模块的开销非常大,而且 Inversify 文档没有任何指导。管理您需要的所有不同导入/导出的名称(接口、符号和容器)是一件痛苦的事情,需要提出某种一致的命名方案。似乎没有 TypeScript 支持从模块自动创建接口的某种方式,就没有办法以理智的方式注入 NPM 包。

我想我可以只对模块使用 jest 的 automock 功能,但我真的不喜欢以这样一种方式设计我的代码,即它只能使用特定的测试框架进行单元测试。

如果我能做到这一点,这似乎至少可以实现一点:

但这仅在模块导出类(而不是工厂)并且仍然不能真正帮助我使用构造函数时才有效。

0 投票
1 回答
1515 浏览

ioc-container - inversify.js 按名称解析

我想为我的 Typescript Node.js 项目创建一个小的 CQRS 框架。

我希望通过 inversify.js 容器中的名称来解析类。我需要这样的东西:

其中 Foo 是常规类,而 container 是 inversify.js 中的 Container 对象。

有可能做我想做的事吗?

0 投票
1 回答
3765 浏览

javascript - 使用 InversifyJS 注入函数的最佳方法

有一个使用InversifyJS注入函数的官方配方。基本上,我们定义了一个辅助函数,它将返回给定函数的柯里化版本,其所有依赖项使用以下方法解析:funccontainer.get(...)

我们像这样使用它:

我想自动注入函数,而不是显式地提供它的依赖关系bindDependencies,可能基于函数的参数名称。像这样的东西:

请注意,在这种情况下,我只想调用一次注入的函数并获取它的返回值,这就是我要导出的值,所以也许有更好的方法可以在不将代码包装在函数中的情况下执行此操作,但我虽然container.get(...)直接在外面使用我的作文根不是一个好主意,因为这个模块的依赖关系不清楚,并且可能分布在它的所有行中。此外,导出该函数将简化测试。

回到我的问题,我的invoke函数如下所示:

因为getParamNames我使用这里提出的解决方案之一:如何从 javascript 动态获取函数参数名称/值

(<any>container).map是我inversify.config.ts在创建容器后在我的容器中创建的一个对象,它链接了我所有依赖项的键和真实键的字符串表示,无论其类型如何(在这种情况下,只是symbolFunction):

任何人都知道是否有更好的方法可以做到这一点,或者是否有任何重要的理由不这样做?

0 投票
1 回答
756 浏览

node.js - inversify-restify-utils 控制器中的空上下文和主体

我试着开始工作inversify-restify-utils,但我遇到了一个问题。请求上下文和正文变量为空。我的控制器:

我的 server.ts:

有什么建议么?

0 投票
1 回答
2324 浏览

node.js - 缺少 @inject 注释,这在使用扩展类的 inversify 中没有丢失

我遇到了一个似乎很难放入标题的问题,这就是为什么您获得了这个标题的野兽。

我收到一条错误消息:Error: Missing required @inject or @multiInject annotation in: argument 0 in class SceneRepository..
这看起来很简单,我应该@inject在我的第一个参数中添加一个注释。这是我的构造函数:

为了完整起见,这就是我的 BaseRepository 的样子:

Model<Document>来自第三方库(猫鼬)。

我不知道我在这里做错了什么,所以如果你能把我推向正确的方向,我将不胜感激。

0 投票
1 回答
1412 浏览

node.js - Inversify:使用类名进行上下文注入

我正在尝试使用inversify将记录器注入不同的类。我想将目标类名传递给记录器以对其进行分类。

问题是我无法从创建绑定的位置访问目标名称:

除了在接收记录器的对象中创建记录器后设置它之外,还有其他方法吗?

谢谢!

安托万