在 inversify 中将具有属性注入的类绑定到内核

2024-02-29

我正在尝试通过以下方式在我的节点项目上实现依赖注入反转 http://inversify.io/.

我有一个这样的内核配置:inversify.config.ts

import "reflect-metadata";
import {Kernel, interfaces} from "inversify";

import {Config} from "./config";
import {Collection} from "./collection";

let kernel = new Kernel();

kernel.bind<Config>("Config").to(Config).inSingletonScope();
// kernel.bind<interfaces.Newable<Collection>>("Collection").toConstructor<Collection>(Collection);
// it works without the line above

一类:config.ts

import {injectable} from "inversify";
@injectable()
export class Config {
  constructor() {}
}

具有 DI 属性的类collection.ts

import {injectable} from "inversify";
import getDecorators from "inversify-inject-decorators";
import kernel from "../inversify.config";
let {lazyInject} = getDecorators(kernel);

@injectable()
export class Collection {
  @lazyInject(Config)
  private Config: Config;

  constructor(a: string, b: string) {}
}

如果我不使用属性注入绑定类,一切都会按预期工作。当我尝试绑定一个类时@lazyInject如示例所示

kernel.bind<interfaces.Newable<Collection>>("Collection").toConstructor<Collection>(Collection);

导入行inversify.config.ts开始处理Collection.ts和线

import kernel from "../inversify.config";`

在里面。然而当我们到达时Collection.ts当我们已经处理时inversify.config.ts文件行

import kernel from "../inversify.config";`

以某种方式返回undefined制作内核undefined for Collection班级。所以@lazyInjectDI 失败。

最终当我尝试阅读时Config in Collection它失败了:

TypeError: Cannot read property 'get' of undefined
    at resolve (node_modules/inversify-inject-decorators/lib/decorators.js:24:30)
    at Category.getter (node_modules/inversify-inject-decorators/lib/decorators.js:6:47)

我想知道是否有一种方法可以通过以下方式完成将类与属性 DI 绑定@lazyInject without将内核定义移动到与其中一个类相同的文件中。我正在寻找一种方法import内核就像现在一样,但使其正常工作。


你的问题是你有一个循环依赖:

我将更改您的代码并添加几个附加文件。不,他的文件types.ts不需要,但建议将所有类型标识符保留在一个位置。

更改代码后,依赖关系图将更改为以下内容:

正如您所看到的,我们已经消除了循环依赖。

inversify.config.ts

import "reflect-metadata";
import {Kernel, interfaces} from "inversify";
import getDecorators from "inversify-inject-decorators";
import { makeProvideDecorator } from "inversify-binding-decorators";

let kernel = new Kernel();
let {lazyInject} = getDecorators(kernel);
let provide = makeProvideDecorator(kernel);

export { lazyInject, provide };

types.ts

let TYPES = {
  Config: "Config",
  Collection: "Collection",
};

export default TYPES;

配置.ts

import { provide } from "../inversify.config";
import TYPES from "./types";

@provide(TYPES.Config)
export class Config {
  constructor() {}
}

export default Config;

集合.ts

import { lazyInject, provide } from "../inversify.config";

@provide(TYPES.Collection)
export class Collection {
  @lazyInject(TYPES.Config)
  private Config: Config;
  constructor(a: string, b: string) {}
}

export default Collection;

main.ts

您需要在导入 @provide 时导入所有依赖项,然后生成绑定。

import Config from "./lib/config";
import Collection from "./models/collection";

//...

我们已经能够使用以下方法消除循环依赖@provide装饰器来自反向绑定装饰器 https://github.com/inversify/inversify-binding-decorators.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 inversify 中将具有属性注入的类绑定到内核 的相关文章

  • 如何在一对一关系上使用 onDelete: 'CASCADE'

    当用户被删除时 我尝试删除用户的个人资料 但它并没有删除个人资料上的任何内容 用户实体 Entity export class User PrimaryGeneratedColumn id number Column name string
  • 如何为 asp.net MVC 5 配置 StructureMap

    我遇到以下错误 我的设置与 asp net mvc 4 类似 没有为此对象定义无参数构造函数 描述 安 当前网页执行期间发生未处理的异常 要求 请查看堆栈跟踪以获取有关的更多信息 错误及其在代码中的起源 异常详细信息 System Miss
  • 依赖注入系统中的事件朝哪个方向发展?

    上或下 我是一个非常注重视觉的人 我将我的应用程序视为一个层次结构 顶部是根 底部是叶子 我还了解到 在 DI 系统中 容器不知道其所包含对象的职责 功能 相反 所包含的对象知道它们的上下文 因为上下文 依赖项 被注入 UP 非 DI 方式
  • 如何使用函数组件和 React Router v5 拦截 React SPA 中的后退按钮

    我正在 React 中的 SPA 中工作 不使用 React Router 来创建任何路由 我不需要允许用户导航到特定页面 想想多页调查问卷 按顺序填写 但是 当用户按下后退按钮时在浏览器上 我不希望他们退出整个应用程序 我希望能够在用户按
  • Angular 4在下一行显示p标签的换行符

    我有一个 Angular 4 页面 我必须在其中显示用户评论列表 用户可以多行输入评论 我想在多行中绑定文本 我想显示以 n在新行中 我努力了 p p p comment text p 我不想更换 n with br 标签 我想要别的东西
  • Typescript - 联合类型

    我创建了以下界面 export interface Message date Timestamp Date interface Timestamp seconds number nanoseconds number 不知道为什么 我收到以下
  • 访问 TypeScript 中默认无名类中的静态属性

    如果我定义一个这样的类 在一个名为 MyClass ts 的文件中 export default class static someProperty 1 someMethod var a someProperty 如何访问 someProp
  • Typescript 通用联盟

    所以我有通用对象数组 想要迭代但打字稿不允许我 这是一些示例代码 有关如何解决此问题的任何建议 type someGeneric
  • 三-mtl-loader 错误:THREE.MeshPhongMaterial:.shading 已被删除 -> 对象不可见

    昨天我问了这个问题 未捕获的类型错误 THREE MTLLoader 不是构造函数 2 0 https stackoverflow com questions 47741644 uncaught typeerror three mtlloa
  • Typescript:理解并集和交集类型

    我试图在打字稿中获得关于并集和交集类型的直觉 但我无法弄清楚这种情况 interface A a number interface B b boolean type UnionCombinedType A B type Intersecti
  • TypeScript 0.9.5:如何定义具有静态成员的接口和实现它的类?

    这用于在 TypeScript 0 9 1 1 中编译 省略方法实现 module MyNodule export interface ILocalStorage SupportsLocalStorage boolean SaveData
  • 如何在 Angular2 中为表单分配和验证数组

    我的模型 this profile 在 javascript 中有一个属性叫做emails 这是一个数组 email isDefault status 然后我将其定义如下 this profileForm this formBuilder
  • 无法在 .tsx 文件中导入 CSS 模块

    我正在使用 typescript 构建基本的 React 应用程序 但无法导入 CSS 文件索引 tsx file 我能够导入索引 css文件如下 import index css this import gives typescript
  • 依赖注入的惰性解析

    我有 net 课程 我使用 Unity 作为 IOC 来解决我们的依赖关系 它尝试在开始时加载所有依赖项 Unity中有没有一种方法 设置 允许在运行时加载依赖项 还有更好的解决方案 Unity 2 0 中对 Lazy 和 IEnumera
  • Angular2:鼠标事件处理(相对于当前位置的移动)

    我的用户应该能够通过鼠标在画布中移动 或旋转 对象 当鼠标事件发生时 屏幕坐标用于计算与最后一个事件的增量 方向和长度 没什么特别的 mousedown 获取第一个坐标 mousemove 获取第n个坐标 计算deltaXY 按deltaX
  • 如何避免 TypeScript 中出现虚假的“未使用参数”警告

    我遇到过很多次这种情况 最后决定弄清楚正确的方法是什么 如果我有一个声明方法的抽象父类 然后一些具体子类在其实现中实现真正的逻辑 并且显然使用方法参数 但某些子类不需要在该方法中执行任何操作 因此不要使用方法参数 那些不必执行任何操作的方法
  • Typescript 模块解析的根路径

    我有两个使用打字稿的项目 一个是核心项目 moduleA 另一个是业务项目 moduleB 项目B使用项目A的模块 ts文件 位于 scripts文件夹 我想通过以下方式为projectB指定模块解析根文件夹projectA scripts
  • Angular 停止 Enter 键提交

    I am trying to stop the Enter from submitting my button and rather make it point to another function I tried trapping th
  • 这是依赖注入吗?这是一种不好的做法吗?

    我有一个小框架 我是这样编码的 我不确定这是否称为依赖注入 我不知道它是否像设计模式 我也不知道并且想知道是否通过 this因为 param 是一种不好的做法 看看这个 不是一个有效的示例 只是将这些代码写入浏览器中以供解释 This is
  • type-graphql:如何知道Resolver返回了哪些字段

    我正在编写一个使用 type graphql 的后端应用程序 GraphQL 架构包括Folder键入如下所示 type Folder id ID name String rules Rule parent Group Rule and G

随机推荐

  • Chart.js 上的悬停模式

    当您未将鼠标悬停在折线图中的特定 点 上时 是否可以激活悬停 I want that每当我将鼠标悬停在图表的任何部分上时就会激活特定的工具提示 Edit 像这样的东西http watchstocks herokuapp com http w
  • 减少纬度和经度点数的最快方法

    我正在尝试减少并组合一些点到这些位置的中心点 现在 我通过找到最接近的一对 将它们组合起来并重复 直到将其减少到我的目标 旁注 实际上我通过排序来减少问题 lat lat long long 然后在每个点的两侧搜索 10 根据我的测试 总是
  • Swift 框架在 lldb 中返回“模糊使用”方法扩展

    我已升级到 Xcode 11 和 swift 5 并在通过框架提供方法扩展时遇到了问题 更具体地说 在一个结构如下的项目中 gt Main Project gt Framework created from sources in Main
  • Keras 1.0 支持 scipy 稀疏矩阵吗?

    我找不到关于 keras 是否支持 scipy 稀疏矩阵作为训练 测试向量的明确答案 我已阅读此链接 这似乎意味着它没有https www kaggle com c walmart recruiting trip type classifi
  • R闪亮滑块输入显示时间

    我有一个与 R Shiny 中的 sliderInput 相关的问题 在 sliderInput 中 该值是一个数字 一些示例显示该数字是 number 但是 如果我想将 sliderInput 的值显示为时间 例如 10 00 15 00
  • 如何循环匹配正则表达式的所有元素?

    案例如下 我想找到与正则表达式匹配的元素 targetText SomeT1extSomeT2extSomeT3extSomeT4extSomeT5extSomeT6ext 我在 javascript 中使用正则表达式 如下所示 reg n
  • Xcode 自动完成块内块(以及它们所在的块......)

    如何设置一个块属性 该属性将另一个块属性作为参数 以便自动完成功能为两个块提供所有必需的参数 为了进一步解释 我将演示自动完成功能如何仅适用于一个块属性 In AppDelegate h 为所有需要访问 block 属性的类创建一个引用 A
  • 如何阻止 PHP 向客户端发送数据,同时仍在服务器中运行 PHP 代码?

    当我遇到一个导致我的 PHP 程序无限循环的错误时 我想到了这个问题 下面是一个示例情况 假设我有一个接收图片上传的PHP网页 该页面可能是图像上传表单的响应页面 在服务器中 脚本应将图像存储在临时文件中 然后 脚本应该向客户端输出一条确认
  • 预处理 C# - 检测方法

    我需要能够预处理多个 C 文件作为项目的预构建步骤 检测方法的开始 并在方法的开始处 任何现有代码之前 插入生成的代码 但是 我在检测方法的打开时遇到问题 我最初尝试使用正则表达式进行匹配 但最终出现了太多误报 我会使用反射 但 Metho
  • Firebase 查询数据

    random key 1 id 0 text This is text random key 2 id 1 text This is text 如果我像这样存储数据 并且我想获取节点id等于0 我怎样才能做到这一点 上面是孩子issue 它
  • Angular2组件单向绑定还是输入?

    在角度 2 中 如果我看到
  • AWS Cloud9:Python 虚拟环境并未实际激活。使用系统范围的Python

    刚刚开始使用 AWS Cloud9 开始了一个新项目 Django with Beanstalk 打开Cloud9环境 输入virtualenv python usr bin python3 6 venv 然后 当我输入 sourse ve
  • 如何安装 VS 2017 的 SignTool.exe?

    升级到 VS 2017 后我得到了 错误 签名时发生错误 找不到 SignTool exe 但仅在 Visual Studio 上使用 MSbuild 发布是没有问题的 我已经检查过文件夹 C Program Files x86 Micro
  • 使用 Bootstrap(使用 Firefox 浏览器)的表单上,选择控件缺少箭头图标

    我在使用 Bootstrap 使用 Firefox 浏览器 的表单上有一个选择控件 但它缺少右侧的箭头图标 这是我使用的相关 HTML div class container fluid div
  • 使用 Ruby CSV 提取一列

    我一直在尝试从 csv 文件中获取单列 我已经查看了文档 http www ruby doc org stdlib libdoc csv rdoc index html http www ruby doc org stdlib libdoc
  • 将 AnnotationMethodHandlerAdapter 替换为 RequestMappingHandlerAdapter 问题

    我最近升级到 spring 3 2 并注意到AnnotationMethodHandlerAdapter已被弃用 取而代之的是RequestMappingHandlerAdapter 所以我重新配置为使用新类 并完成自定义MessageCo
  • Firebird BLR 是否包含相关字段大小?

    Firebird 和 InterBase 以 BLR 标记化 格式保存存储过程和触发器的编译形式 但我不太了解BLR的结构 字段大小是 BLR 的一部分吗 当存储过程包含两个字段 源和目标 并且稍后我将更改这两个字段的大小时 我会遇到一些问
  • Opencv2:Python:cv2.VideoWriter

    为什么下面的代码没有保存视频 另外 网络摄像头的帧速率是否必须与VideoWriter镜框尺寸 import numpy as np import cv2 import time def videoaufzeichnung video wd
  • 从 Excel 电子表格中的每一行创建文本文件

    我需要帮助从名为 工作表 的 Excel 电子表格中的每一行创建单独的文本文件 我希望文本文件以 A 列的内容命名 B G 列为内容 最好在文本文件中的每列之间使用双硬回车 这样每列之间都会有一个空行 这可能吗 我该怎么办呢 谢谢 nuts
  • 在 inversify 中将具有属性注入的类绑定到内核

    我正在尝试通过以下方式在我的节点项目上实现依赖注入反转 http inversify io 我有一个这样的内核配置 inversify config ts import reflect metadata import Kernel inte