问题标签 [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.
unit-testing - 使用 inversifyJS 和 Alsatian 测试框架的构造函数注入
希望有人可以在这里指导我正确的方向我正在使用带有 Alsatian 测试框架的 inversifyJS
基本上设计要求使用多种服务,包括数据库和其他 api 客户端,我认为让 IOC 到位来管理依赖项是个好主意
我在使用 Alsatian 框架时面临的问题是属性注入或构造函数注入都不起作用,只能从容器工作中手动解决它
我不知道为什么,如果有人有兴趣检查它,我已经清理并设置了一个小型测试项目
https://github.com/dshamim/alsatian-test-ioc
你需要运行 yarn 才能运行,进入项目目录并输入:
我试图保持代码结构化,所以如果有人有任何想法可以做些什么来让构造函数注入工作,那就太好了
angular - Inversify 的依赖注入,如 Angular 使用 TS 装饰器
今天我将一个 js电子项目切换到 typescript,问自己是否有与angular的依赖注入等价的东西。由于Angular Universal似乎处于非常早期的状态,并且根本没有将它与电子而不是express一起使用的文档,因此inversify似乎可以满足我的需求。也因为它比 Angular 更轻巧,因为我只需要 DI。
我最终尝试创建一个与NgModule
Angular 中的装饰器类似的装饰器。
它循环遍历提供者中的每个条目并将其绑定到 inversifys 容器对象。我想使用的这个功能如下。然后,用法将与 angulars 装饰器中的完全一样。
例如,DatabaseService
可能看起来像
并且应该可以以角度样式注射,例如
我不确定 inversify 的容器。它的范围仅在装饰器功能中吗?将它用作
我如何正确地将其返回到AppModule
? 我在 servermodule 装饰器中声明类的想法是个好主意吗?
现在我只收到以下关于 tsc 和电子执行的错误消息,但没有 ts linting 错误。
另一个想法/问题是:如果除了声明和提供者之外我还想要一个导入属性。那么通过装饰器修改构造函数并导入这些类会是一个好主意吗?
谢谢!
typescript - 使用 typescript 在类实例化时处理 Inversify @inject() 参数
尝试使用Inversify实现 DI ,尚不清楚在进行依赖注入时如何在没有任何参数的情况下实现类实例化。这几乎等同于角度 DI。在 Angular 中,一个能够构建包含注入的类而无需任何 @Inject 参数。
app.module.ts
根模块创建一个 InversifyContainer
并收集所有可注入的类实例。该类DatabaseService
应包含所有数据库操作并具有@injectable
装饰器。
模型.ts
获取的Models
可注入实例DatabaseService
。在另一个类中,我现在想创建一个Models
. 如何在没有任何参数的情况下实现类实例化?就像它是有角度的。
我的班级.ts
你有什么想法或建议吗?谢谢!
webpack - InversifyJS with webpack,库大小远超4k
我是 InversifyJs 的新手。它看起来很棒,我正在尝试将它实施到我的项目中。在官方网站 ( http://inversify.io/ ) 上,我读到它是一个 4k 库,这很好,因为我必须使包的大小尽可能小。不幸的是,在实现它之后,捆绑包的整体大小(缩小和压缩)增加了大约 20k。这个意外的结果不是很好,如果我找不到解决方案,我必须删除 inversifyjs。我想知道我的配置可能有问题。
配置:
}
1)我在之前的tsconfig中只添加了这两个属性: "lib": ["es6", "dom"] "types": ["reflect-metadata"]
2)我在我的应用程序的入口点添加了导入“reflect-metadata” 。仅这个库就增加了大约 4k 的捆绑包。
3)我创建了一个容器并更改了要注入的现有类。当我将容器导入到我的应用程序入口点时,InversifyJs 成为我的 webpack-bundle 的一部分,增加了大约 15k。预期的结果是将捆绑包增加不超过 4k + 我为实现容器而添加的新几行代码的大小。
注意: InversifyJs 对我来说很好用。我唯一的问题/担忧是图书馆的规模远高于官方网站上的展示方式。
node.js - TypeError:Reflect.hasOwnMetadata 不是函数
我正在尝试将 inversify 与 typescript 和 node.js 一起使用。我目前正在使用 node.js 版本 6.9.1、typescript 版本 2.6.2 和 ECMAScript 6。当我尝试运行 node.js 应用程序时,我不断收到以下错误,“TypeError: Reflect.hasOwnMetadata is not a function ”。
按照我在网上找到的文档,通过在 inversify.config.js 文件的顶部添加 import "reflect-matadata",它似乎工作了一段时间,但现在问题又回来了。
在我的 inversify.config.ts 文件中,我有以下从我的 app.ts 文件中调用的代码:
此代码存在于 app.ts 中,它调用 inversify.config.ts 文件中的代码:
问题似乎在 node_modules/inversify/lib/annotation/decorator_utils.js:22 中的以下行:
在生成的 inversify.config.js 文件中,以下代码似乎在 import "reflect-metadata" 的上方:
我注意到我在网上找到的帮助只表明我需要添加导入“reflect-metadata”。
另外,这是我的 tsconfig.json 文件:
有人可以查看并让我知道我可能会丢失什么吗?
更新:对于上述问题,我将导入“reflect-metadata”添加到文件 inversify.config.ts 文件中。但是,我评论了这个导入语句并将导入“reflect-metadata”添加到 app.ts 文件中,现在我得到了一个不同的错误:
现在我在互联网上发现了一个帖子,似乎描述了添加导入“reflect-metadata”添加了一个 Reflect 全局变量。另外,我不知道这是否有帮助,但我从控制器中删除了 @injectable 装饰器。
javascript - Typescript InversifyJS - 如何从 maint.ts 设置变量值并从控制器获取值
我是 Typescript 和 InversifyJS 的新手。我想要实现的是在多个文件之间共享变量值。我在 main.ts 上设置服务器启动时的值,并试图从控制器中获取该值。我所做的是创建了一个@injectable 服务文件
服务.ts
我可以从 main.ts 设置值,但是在对其他文件调用 SetGetService 之后,它是未定义的或为空的。它似乎正在被重置或清除。
typescript - 反转部分注入
如何使用 Inversify 完成部分属性注入?
假设我们有课
如果 b 的所有可能值在编译时都已知,我如何在其他类中使用这个 MyClass 和 inversify。所以,我只需要一个 MyClass 的实例b = "a"
和另一个带有b = "b"
.
我目前找到的唯一解决方案是两个为此定义两个不同的绑定或使用工厂直接调用new MyClass
.
在第一种情况下,我只需要写类似的东西
看起来很乱,没有解决下一个问题,工厂也没有解决。如果在这种情况下我有很深的对象层次结构,我需要通过这个手动对象构建链来构建它们。
这里最好的方法是什么?
带有星号的任务,是否可以通过用提供的单个依赖项替换相同的单个依赖项来解决某些依赖项树?就像,我们可以有类似的东西
e
所以我不想用我构建的依赖来替换依赖。我怎样才能做到这一点?
typescript - 如何动态绑定动态导入的类型
我正在尝试将模板自动连接到 inversifyjs 容器,但无论我尝试什么,它都不起作用。请帮忙?
和文件 ./component.html.tpl
和 ./component.ts.tpl
完全按预期记录到控制台:
但我真的很期待 foreach 语句中的代码:
等同于:
但是当我尝试在另一个循环中解决它时:
它抛出一个错误:
有谁知道如何解决这个问题?
javascript - 根据环境处理 InversifyJS 配置
我一直在使用InversifyJS来处理我的打字稿服务器上的 DI。关键是我想根据环境在我的代码上注入不同的实现。
有一个常见的场景,我想在生产中使用 S3,但在我的笔记本电脑上开发时使用本地文件夹。由于我使用 aninterface
来进行这种通信,因此可以选择使用两个不同的配置文件以及容器信息,但是在我的服务上使用条件加载容器是很脏的。
另一种选择是拥有一个配置文件,但根据环境配置一个或另一个实现。像这样的东西:
但我一点也不喜欢这样,因为如果你有三个(或更多)不同的环境有不同的需求,那就有点疯狂了。
有任何想法吗?
typescript - 反转打字稿工厂绑定返回联合类型?
我正在使用 inversify v4.13.0 和 Typescript,这两个我都是新手。
我有一个Logger
界面:
类型文件:
和一些绑定,包括我有问题的记录器工厂绑定,它也将配置对象作为参数:
然后我尝试使用我的记录器:
如果我尝试使用 Logger 而不进行强制转换,我会看到此错误:
工厂似乎正在返回一个联合返回的自身类型——工厂函数(奇怪???)和记录器。
我检查了 typedef,这似乎是正确的,尽管我不明白这是如何工作的。从类型定义:
我是否错误地将 inversify 用于工厂?我该如何纠正?