问题标签 [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 投票
1 回答
3213 浏览

node.js - 使用 tsyringe 使用 Typescript 进行动态依赖注入

我正在尝试构建和示例以了解 DI 框架/库的工作原理,但我遇到了一些问题。

我有这个接口有两种可能的实现:

子类

sum.ts

计算器.ts

索引.ts

有没有办法让我有两个具有不同行为的计算器,或者我做错了?

0 投票
2 回答
3783 浏览

node.js - 开玩笑测试 - 请在入口点的顶部添加“import "reflect-metadata""

我正在开发一个使用依赖注入的应用程序tsyringe。这是将存储库作为依赖项接收的服务示例:

和依赖容器:

在测试中,我不想使用在容器上注册的依赖项,而是通过参数传递一个模拟实例。

但我收到以下错误:

tsyringe 需要一个反射 polyfill。请将“import "reflect-metadata"”添加到入口点的顶部。

我的想法是 - “我可能需要在执行测试之前导入反射元数据包”。所以我创建了一个jest.setup.ts导入reflect-metadata包的。但是又出现了一个错误:

错误

存储库的实例不知何故未定义。

我想安静地进行测试。

0 投票
1 回答
464 浏览

typescript - tsyringe container.resolve 在自定义装饰器中创建一个新的调用实例

我正在尝试为tsyringe创建一个自定义装饰器以通过属性注入。

我的代码:

服务

调用类

控制台输出

当前行为:每次调用注入类的方法时,都会再次调用构造函数。所以这意味着我的类在每次新调用时都会得到新的初始化。

当我使用以下代码时,一切似乎都在工作

控制台输出

发生这种情况的任何原因?

0 投票
1 回答
1013 浏览

node.js - 无法在“GetModelService”构造函数的位置 #0 注入依赖项“modelRepository”。原因:无法读取未定义的属性“名称”

我一直在使用sequelize-typescript,tsyringe在这里进行重构工作,我在这里遇到了一个非常有趣的错误。好吧,通常我的所有存储库容器都正常注册并使用以下设置正确实例化:

  • 我在我的应用程序的根目录和tsyringe它之后的容器上导入反映元数据

  • 容器/索引内部是以下代码,我sequelize-typescript用来制作存储库。

  • 然后我用快递做所有的路由:

  • 所以我们去调用的路线container.resolve()

  • 这是他调用的服务

  • 直到那里一切都很好并且工作正常,但是当我尝试将该模型与另一个使用sequelize. Tsyringe停止能够正确注入依赖项并给出标题错误消息。这是我要关联的模型。

  • 如果我删除那个“ Model.hasMany(User);”它会恢复正常并且注射发生,我很困惑不知道发生了什么......

  • 顺便说一下,这是我的模型库

  • 如果信息太多,我很抱歉,但我试图提供尽可能多的信息,以便有人可以帮助我。但老实说,我对找到解决方案持怀疑态度,可能我不得不将此方法与这个模型并尝试分开做。正如您注意到的那样,我更改了模型的名称,所以我可能拼错了一些东西,但不用担心实际代码上没有拼写错误,因为这个错误只会在我将“ Model.hasMany(User);”添加到initModel()函数时发生。希望有人能够帮助我,我会在身边的任何问题都不要害怕问。:)

0 投票
0 回答
132 浏览

javascript - 无法使用 babel 将 tsyringe 打字稿文件转换为 javascript

似乎 babel/plugin-proposal-decorators 没有将 tsyringe inject() 和 injectable() 转换为 javascript。这是我用来将我的打字稿文件转换为 javascript 的脚本:

这是我的 babel.config.js:

这是在终端返回给我的错误:

这是我的 CreateUserService.ts 文件。这是我用来在我的应用程序中创建新用户的服务,我使用了两个 tsyringes 容器(usersRepository 和 hashProvider)。我使用TypeORM作为我的 ORM:

0 投票
2 回答
866 浏览

singleton - 如何在 Tsyringe 中实现单例

我在实现单例时遇到了麻烦,因为标记为@singleton() 的类在每个resolve() 上都被重新创建。

这是示例

如何获得所需的行为?

0 投票
2 回答
715 浏览

reactjs - 使用 tsyringe 与 TypeScript 反应以进行依赖注入

我目前在使用 React TypeScript 项目时遇到问题。

我创建了我的项目npx create-react-app my-app --template typescript

我最近为依赖注入添加了 tsyringe,并试图为 apiService 实现它。按照自述文件(https://github.com/microsoft/tsyringe#injecting-primitive-values-named-injection)添加原始值后,我遇到了障碍。我已经将实验性装饰器和发射装饰器元数据添加到我的tsconfig.json文件中,但没有成功。

我遇到的错误实际错误是:

我相当确定这个问题是由 Babel 引起的,但是我使用 npm create react-app --template typescript 创建了这个问题,并且似乎无法访问 Babel 配置。

网络服务.ts

调用方法

在 index.ts 中注册类

0 投票
1 回答
379 浏览

node.js - 无法在位置 #0 注入依赖项,因为 TypeInfo 未知

我遇到了这个麻烦:

容器

控制器

用例

它在 Windows 上正常工作,但现在我已更改为 mac 并停止工作。我已经delaytsrynge但仍然无法正常工作。

当我调用使用此存储库的路由时会发生这种情况,但看起来不错,数据库已创建。

我在应用程序文件中的导入:

0 投票
1 回答
255 浏览

javascript - 使用 tsyringe 使用构造函数参数注册服务

我有一个服务来处理一些数据获取,我正在尝试使用 tsyringe,创建服务的函数被多次调用(我对此无能为力),所以它创建了许多服务实例。我试图将它包装在“container.isRegistered”检查中,但是当我这样做时,它根本不会注册服务。

到目前为止,我所拥有的是:

然后我在另一个文件中注册它:

在另一个文件中,我像这样解决它:

尝试检查它是否已注册会完全停止服务的注册,但如果没有,我将运行多个实例。该服务主要处理数据获取,它只应该在启动时获取一些数据,但我看到很多调用都是这样做的。我在服务构造函数中放了一些日志,我可以看到它被创建了很多次。

谢谢你的帮助!

0 投票
1 回答
164 浏览

node.js - 使用 tsyringe 将依赖项注入控制器时出错

我正在使用 express 和 tsyringe 进行依赖注入。

当我尝试在我的控制器上使用服务依赖项时,我收到一个错误UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'addressService' of undefined in file addressController.ts

我搜索了几个视频和文章,但找不到解决它们的方法。我将在下面留下我的代码

地址存储库.ts

addressRepositoryImpl.ts

地址服务.ts

地址ServiceImpl.ts

地址控制器.ts

行错误: const result = this.addressService.getAddresses();

路线.ts