文档中心
探索 DWeb 框架的无限可能,构建下一代高性能 Web 应用
ServiceContainer (服务容器)
DWeb 框架提供了服务容器(Service Container)功能,支持依赖注入(DI)模式。服务容器支持三种生命周期:**Singleton(单例)**、**Transient(瞬态)** 和 **Scoped(作用域)**。
概述
Code
注册服务
方式 1:使用 services/mod.ts 统一管理(推荐)
在 services/mod.ts 中统一管理所有服务配置,然后在 main.ts 中一键注册:
Code
Code
方式 2:直接在插件中配置服务
Code
方式 3:手动在插件中注册
Code
方式 4:直接使用 Application 类
Code
获取服务
通过 Application 实例获取
Code
在 API 路由中获取(推荐使用 ApiContext)
Code
服务生命周期
Code
**说明:**
**Singleton**:整个应用生命周期内只有一个实例,适合共享状态的服务
**Transient**:每次获取都创建新实例,适合无状态的服务
**Scoped**:在作用域内单例,适合请求级别的服务
依赖注入示例
Code
内置服务
框架已经注册了一些内置服务,可以直接使用:
Code
API 参考
registerSingleton<T>(token, factory)
注册单例服务,整个应用生命周期内只有一个实例
Code
registerTransient<T>(token, factory)
注册瞬态服务,每次获取都创建新实例
Code
registerScoped<T>(token, factory)
注册作用域服务,在作用域内单例
Code
get<T>(token)
获取服务实例
Code
has(token)
检查服务是否已注册
Code
clearScope()
清除作用域实例(用于请求结束后清理)
Code
注意事项
- 服务注册时机:服务应该在应用初始化之前注册,推荐在插件的
onInit钩子中注册。 - 类型安全:使用泛型可以确保类型安全:
const userService = app.getService('userService') - 服务依赖:服务可以依赖其他服务,通过服务容器解析。
- 错误处理:如果服务未注册,
getService会抛出错误。可以使用has方法检查。
相关文档
- Application (应用核心)
- IService (服务接口)
- API 路由 - 在 API 路由中使用服务容器