# @frontmcp/di 中文文档

规范地址：https://npmcn.com/package/%40frontmcp/di/

版本：1\.12\.2
npm 元数据更新时间：2026-11-14T21:10:31.164Z
中文译文更新时间：2026-11-15T15:10:13.590Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40frontmcp/di
原文对照：https://npmcn.com/package/%40frontmcp/di/?lang=original
项目主页：https://frontmcp.dev/
源码仓库：https://github.com/agentfront/frontmcp

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：118 kB，31 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=24\.0\.0
- 运行依赖：0 个
- peer 依赖：reflect-metadata ^0\.2\.0，@frontmcp/lazy-zod 1\.12\.2
- 首次发布：2026-01-03T22:05:53.586Z
- 最新版本发布：2026-11-14T21:10:30.681Z
- 近 30 天下载量：13263（2026-10-16 至 2026-11-14，npm 官方下载统计）
- 已发布版本数：111（近 12 个月 111 个）

## 中文简介

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

## 安装

```sh
npm install @frontmcp/di
```

也可以使用：`pnpm add @frontmcp/di`、`yarn add @frontmcp/di`、`bun add @frontmcp/di`

## README

# @ frontmcp/di (英语)

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

[![npm](https://img.shields.io/npm/v/@frontmcp/di.svg)](https://www.npmjs.com/package/@frontmcp/di) [![License](https://img.shields.io/npm/l/@frontmcp/di.svg)](https://github.com/agentfront/frontmcp/blob/main/LICENSE)

## 安装

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

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

## 使用量

```ts
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()` 召回电话.

## 文档

-   [`@Provider`](https://frontmcp.dev/reference/sdk/provider): FrontMCP 服务器中的供应商, 建在这个容器上
-   [与供应商共享状态](https://frontmcp.dev/learn/sharing-state-with-providers):分步骤指南

## 相关软件包

-   [`@frontmcp/sdk`](https://www.npmjs.com/package/@frontmcp/sdk): 框架。 用它来 `@Provider` 在 FrontMCP 服务器中.
-   [`@frontmcp/lazy-zod`](https://www.npmjs.com/package/@frontmcp/lazy-zod): Zod 用于 `providerMetadataSchema`。 。 。 .

## 捐款

资料来源: [`libs/di`](https://github.com/agentfront/frontmcp/tree/main/libs/di)欢迎提出问题和拉动请求;见 [捐款额](https://github.com/agentfront/frontmcp/blob/main/CONTRIBUTING.md)。 。 。 .

## 许可证

阿帕奇2.0 (英语). 见 [自由主义](https://github.com/agentfront/frontmcp/blob/main/LICENSE)。 。 。 .

## 常见问题

### @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 和提交记录判断。

