问题标签 [tsyringe]

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 投票
0 回答
119 浏览

node.js - 通过依赖注入在控制器中使用 socket.io

堆栈: Node.js + Express + TypeScript + Socket.io + tsyringe
架构:有一个WebServer类创建套接字连接,然后将iosocket对象传递给SocketController类。这两个类都被装饰了,@singleton()并且WebServer该类在一个名为 的顶级静态函数中解析main
问题:多次调用套接字方法后,发射过程(响应套接字上的侦听方法)多次发生。每次调用该方法时,它实际上都会递增。但是控制器中的实际逻辑每次调用只执行一次。
代码:
顶级模块:

WebServer班级:

SocketController班级:

0 投票
2 回答
351 浏览

typescript - TSyringe 注入所有实现某个接口的类

我一直在寻找 TSyringe 是否有可能注入所有实现某个接口(或从抽象类扩展)的类,如下所示:

我一个月前才开始使用 TSyringe,所以我对所有功能都不熟悉,也不知道如何在 DI 容器中注册这种依赖项(如果可以实现我的建议)。我正在尝试模仿 Spring@Autowire注释。

0 投票
0 回答
35 浏览

typescript - 内部服务器错误 - 无法读取未定义的属性“sendMail”

我正在使用 Jest 运行集成测试,以测试向用户发送密码恢复电子邮件。

在我的用例中,我使用 tsyringe 注入电子邮件发送服务(使用 ethereal、nodemailer)。该服务的实例属于类型registerInstance,以便应用程序一启动就可以创建客户端。

通过 Insomnia 执行请求,响应成功并发送电子邮件,但在集成测试中不会发生同样的情况。有谁知道为什么?

这是我得到的错误:

调用电子邮件服务的用例:

电子邮件服务:

应用程序中的控制器具有接收来自的电子邮件request.body并将其传递给 useCase 的唯一功能。

这是更新存储库的链接: 代码在 integration_tests_for_sending_password_reset_mail 分支中

https://github.com/i-ramoss/rentx/tree/integration_tests_for_sending_password_reset_mail

0 投票
1 回答
212 浏览

typescript - TSyringe 和 TypeORM 在其他依赖项之前导入数据库依赖项

我面临一个问题,其中我有很多存储库(它们是实现一个接口的 TS 类,它们是typeorm存储库类)并且我使用 TSyringe 来处理我的 API 中的所有依赖项

这是一个存储库的示例

之后,我将所有存储库注册到一个文件中,在“shared/container/repositories/index.ts”中

在我的应用程序中,我也有一些提供程序(它们基本上是第三方 API 的实现,例如 AWS、GoogleFirebase 等......)

我想要做的是将我的一些存储库注入到我的提供程序中,然后我想注册它们由 TSyringe 容器解析的实例。

当我尝试做我刚刚在上面写的事情时,问题就开始了。在使用 TSyring 容器注册我的存储库和提供程序时,我会:

它们都是执行 TSyringe container.registerSingleton、.resolve 或 .registerInstance 方法的大量 TS 文件。

我总是收到这个错误:

此错误意味着我的存储库尚未启动,因此当 TSyringe 尝试将它们注入我的提供程序时,它们尚未与数据库建立连接,因此我收到此错误。如果我不将这些存储库注入到我的提供程序中,那么一切正常。

关于如何解决这个问题的任何想法?我想做的是:

  1. 首先解析并注册所有存储库单例,以便它们与数据库连接。
  2. 只有在那之后,注册所有提供者。

关于如何做到这一点的任何想法?我希望我已经清楚地解决了我的问题,请问你们是否有任何疑问,我将编辑帖子以使其更清楚。

提前致谢。

更新:我尝试添加所有 TSyringe .registerSingleton() || .registerInstance() || .resolve(), 在一个 "setTimeout(() => {}, 3000)" 里面,它起作用了!正如我在问题中所说,我只需要稍等片刻,以便在我的存储库中建立数据库连接,然后再注入提供程序。

在这里你可以看到我做了什么

虽然它有效,但我发现这个解决方案非常令人不快且不优雅。有没有更好的方法来实现更好的解决方案?

0 投票
0 回答
18 浏览

node.js - 将使用 tsyringe 的 typescript 的节点 js 转换为 javascript

我已经用 node.js 和 typescript 构建了项目,并且我使用这个库 tsyringe 来进行依赖赔偿补偿。我的问题是当我尝试转换此错误出现时,我无法将我的项目转换为所有 js 而不是打字稿 在 此处输入图像描述

0 投票
0 回答
37 浏览

typescript - TSyringe:如何更改注入对象的参数?

我有一个包含多个不同组件的应用程序,每个组件都有自己的依赖项,并且正在使用 TSyringe 来管理依赖项注入。其中一个组件是这样的运算符:

它是一个执行操作的类,依赖于一堆其他类,并且有一个字符串参数来指定它将操作的方式。

在主应用程序中,我正在初始化主应用程序使用的所有不同组件,并且我需要使用几种不同的操作类型来初始化 MyOperator。

我的问题是,在 MainApp 构造函数参数中定义它们时,如何更改类中的单个operationType参数?MyOperator

0 投票
0 回答
38 浏览

typescript - 循环依赖在哪里?

我正在使用 Tsyringe 编写 CLI 并出现错误。我不确定我知道为什么。

这是代码:

0 投票
1 回答
37 浏览

reactjs - 如何使 tsyringe (dep injection lib) 解析具有依赖关系的类?

我显然误解了 TSyringe 应该如何解决具有依赖关系的类。

我创建了一个最小的复制。在我的 index.tsx 中,我按照文档和 import 中的指示进行操作reflect-metadata。如果我注入一个singleton没有依赖项的类,则此示例有效:

一个单例类:

以及使用它的组件:

当我运行应用程序时,Worked!文本按预期打印。

但是,如果我创建第二个名为 B 的单例:

然后注入BA获取消息:

然后它失败了Uncaught Error: TypeInfo not known for "A"

我有:

在我的tsconfig.ts,正如他们在自述文件中指出的那样。

注射器不应该自动解析 B,将 B 注入 A,然后将 A 注入我的应用程序组件,以便我可以打印消息吗?

我错过了什么?

0 投票
1 回答
19 浏览

node.js - 在 Node.js 后端确定一周和自动函数的实用方法

我正在开发一个后端服务器,使用 Postgres 作为我朋友游戏项目的数据库。一切进展顺利,但我想添加一些我还不了解的功能。

游戏与等级一起使用。每天人们都可以进行短距离比赛。每个玩它的人都会朝着目标得分。有月排名、周排名和日排名。每场比赛都有助于各自的排名。周是通过从星期一开始到星期日结束来衡量的。

月度和日度指标很容易,但我想知道在更务实的一天进行周排名。如何确保我可以使用各种 JavaScript 函数轻松地描述每个月的一周等等?例如,我们在 2022 年的第 10 周,或第 15 周等。

另外,我想创建一个功能,该功能将在每天 00:00 每 24 小时自动运行一次,并通过电子邮件发送每日排名,以及周日的每周排名('当每周排名重置时')和结束时每一个月。在此过程中可能会删除旧的和无用的过去排名。

所以目标是:

  • 检测当前弱点的最佳方法,即使是在逐月转换时,并跟踪每个等级
  • 如何通过电子邮件将这些等级发送给游戏所有者(我的朋友)
  • 如何创建一个在服务器上每 24 小时 00:00 自动运行的功能来标记此类排名。

我希望我已经足够清楚地阐述了这个问题。我将不胜感激,如果我能帮助使问题更清楚,请问我任何问题

项目的依赖关系:

笑话:“^27.4.1”,bcryptjs:“^2.4.3”,csv-parse:“^5.0.4”,快递:“^4.17.2”,快递异步错误:“^3.1.1” ,开玩笑:“^27.5.1”,jsonwebtoken:“^8.5.1”,multer:“^1.4.4”,pg:“^8.7.3”,反射元数据:“^0.1.13”,swagger- ui-express:“^4.3.0”,ts-jest:“^27.1.3”,tsyringe:“^4.6.0”,typeorm:“^0.2.43”,uuid:“^8.3.2”

还有一些更多的开发依赖项,但我不确定它们是否相关。

提前谢谢大家!

0 投票
0 回答
10 浏览

reactjs - 将商店供应商纳入同一个容器供应商

使用 react 和 typescript 这是一个 app.tsx 文件,而不是 js 文件。有以下问题

我需要将我的商店添加到此提供商 store={store} 但收到错误消息

我不能注入两个依赖项:/