@frontmcp/di

中文文档
1.12.2发布于 2026/11/15Apache-2.0TypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 1.3万

通用依赖性注射容器和TypeScript应用的登记设施

中文使用文档
文档目录9 节
  1. 安装
  2. 使用量
  3. 供应商
  4. 范围
  5. 等级和登记
  6. 文档
  7. 相关软件包
  8. 捐款
  9. 许可证

@ frontmcp/di (英语)

FrontMCP背后的依赖性注射容器. 这是一个内部包: @frontmcp/sdk 用于构建提供者和注册,并为您安装。 在 FrontMCP 服务器中,声明共享服务 @Provider 并读他们与 this.get() 从 @frontmcp/sdk 换句话说 容器没有FrontMCP专用代码,因此也可以在任何TypeScript项目中自行使用.

npm License

安装

npm install @frontmcp/di @frontmcp/lazy-zod zod reflect-metadata

@frontmcp/lazy-zod (这需要 zod 4)和 reflect-metadata 是同伴的依赖关系。 导入 reflect-metadata 一次,在别的事之前。 它需要节点.js 24或后.

使用量

import 'reflect-metadata';

import { createTokenFactory, DiContainer, ProviderScope } from '@frontmcp/di';

const tokens = createTokenFactory({ prefix: 'Desk' });
const DESK_URL = tokens.type('DeskUrl');

class TicketStore {
  static metadata = { name: 'TicketStore', scope: ProviderScope.GLOBAL };
  readonly tickets = new Map<string, string>();
}

class TicketClient {
  constructor(
    readonly store: TicketStore,
    readonly baseUrl: string,
  ) {}
}

const container = new DiContainer([
  TicketStore,
  { provide: DESK_URL, useValue: 'https://desk.example.com' },
  {
    provide: TicketClient,
    inject: () => [TicketStore, DESK_URL],
    useFactory: (store: TicketStore, baseUrl: string) => new TicketClient(store, baseUrl),
  },
]);

await container.ready;

const client = container.get(TicketClient);

供应商

表单如何建设
MyClass与 new选项 static metadata = { name, scope } 命名并设定其范围。 当 TypeScript 记录其类型时, 构造参数会被注入, 它用于装饰类 emitDecoratorMetadata 继续.
@AsyncWith(() => [DepA, DepB]) 在课上通过叫它静态 with(depA, depB),这也许是同步的.
{ provide, useValue }价值本身.
{ provide, useFactory, inject }打电话 useFactory 与供应商 inject() 返回,顺序.
{ provide, useClass }像一个阶级,注册在 provide。 。 。 .

provide 是类、符号或字符串. createTokenFactory({ prefix }) 制作符号 Symbol.for(),因此在一个过程中的两份包共享: tokens.type('DeskUrl') 实值 Symbol.for('Desk:type:DeskUrl')。 。 。 .

范围

  • ProviderScope.GLOBAL (默认):一个实例,在容器启动时按依赖顺序构建. await container.ready,然后读它与 container.get(token),或 container.tryGet(token)返回时 undefined 而不是扔东西.
  • ProviderScope.CONTEXT:每个上下文一个实例,如请求或会话. 构建上下文 const views = await container.buildViews(key),然后读它与 container.getScoped(token, views)。 。 。 .

A 类 GLOBAL 提供者不能依赖一个 CONTEXT 一,容器投出依赖周期.

等级和登记

new DiContainer(providers, parent) 看上面没有的标志 parent。该套件还输出FrontMCP自己的登记册的登记基础类别: RegistryAbstract, (中文(简体) ), SimpleRegistry,以及 IndexedRegistry,该索引按身份、姓名和所有者列出条目,采用儿童登记册,并显示事件更改为 subscribe() 召回电话.

文档

捐款

资料来源: libs/di欢迎提出问题和拉动请求;见 捐款额。 。 。 .

许可证

阿帕奇2.0 (英语). 见 自由主义。 。 。 .

版本与发布记录

@frontmcp/di 共发布 111 个版本,首次发布于 2026/01/04;过去 12 个月发布了 111 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.12.2latest2026/11/151 天前
1.12.12026/11/132 天前
1.12.02026/11/114 天前
1.12.0-rc.1rc2026/11/114 天前
1.11.32026/11/106 天前
1.11.22026/11/096 天前

其他发布通道:beta → 1.1.2-beta.1,rc → 1.12.0-rc.1。

关于 @frontmcp/di 的常见问题

@frontmcp/di 是什么?

通用依赖性注射容器和TypeScript应用的登记设施

如何安装 @frontmcp/di?

在项目目录运行 npm install @frontmcp/di,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:reflect-metadata(^0.2.0)、@frontmcp/lazy-zod(1.12.2)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@frontmcp/di 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@frontmcp/di 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@frontmcp/di 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@frontmcp/di 可以商用吗?

@frontmcp/di 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@frontmcp/di 的下载量有多少?

根据 npm 官方下载统计,@frontmcp/di 在 2026/10/16 – 2026/11/14 这 30 天内被下载 13,263 次,日均约 442 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@frontmcp/di 还在维护吗?

最新版本 1.12.2 发布于 2026/11/15(1 天前);至今共发布 111 个版本,其中过去 12 个月发布了 111 个;首次发布于 2026/01/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。