@ frontmcp/di (英语)
FrontMCP背后的依赖性注射容器. 这是一个内部包: @frontmcp/sdk 用于构建提供者和注册,并为您安装。 在 FrontMCP 服务器中,声明共享服务 @Provider 并读他们与 this.get() 从 @frontmcp/sdk 换句话说 容器没有FrontMCP专用代码,因此也可以在任何TypeScript项目中自行使用.
安装
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() 召回电话.
文档
相关软件包
@frontmcp/sdk: 框架。 用它来@Provider在 FrontMCP 服务器中.@frontmcp/lazy-zod: Zod 用于providerMetadataSchema。 。 。 .
捐款
资料来源: libs/di欢迎提出问题和拉动请求;见 捐款额。 。 。 .
许可证
阿帕奇2.0 (英语). 见 自由主义。 。 。 .