ECS Framework API / ServiceContainer
Class: ServiceContainer
Defined in: packages/core/src/Core/ServiceContainer.ts:95
服务容器
负责管理所有服务的注册、解析和生命周期。 支持依赖注入和服务定位模式。
特点:
- 单例和瞬时两种生命周期
- 支持工厂函数注册
- 支持实例注册
- 类型安全的服务解析
Example
const container = new ServiceContainer();
// 注册单例服务
container.registerSingleton(TimerManager);
// 注册工厂函数
container.registerSingleton(Logger, (c) => createLogger('App'));
// 注册实例
container.registerInstance(Config, new Config());
// 解析服务
const timer = container.resolve(TimerManager);Constructors
Constructor
new ServiceContainer():
ServiceContainer
Returns
ServiceContainer
Methods
registerSingleton()
registerSingleton<
T>(type,factory?):void
Defined in: packages/core/src/Core/ServiceContainer.ts:131
注册单例服务
Type Parameters
T
T extends IService
Parameters
type
ServiceType<T>
服务类型
factory?
(container) => T
可选的工厂函数
Returns
void
Example
// 直接注册类型
container.registerSingleton(TimerManager);
// 使用工厂函数
container.registerSingleton(Logger, (c) => {
return createLogger('App');
});registerTransient()
registerTransient<
T>(type,factory?):void
Defined in: packages/core/src/Core/ServiceContainer.ts:163
注册瞬时服务
每次解析都会创建新实例。
Type Parameters
T
T extends IService
Parameters
type
ServiceType<T>
服务类型
factory?
(container) => T
可选的工厂函数
Returns
void
Example
// 每次解析都创建新实例
container.registerTransient(Command);registerInstance()
registerInstance<
T>(type,instance):void
Defined in: packages/core/src/Core/ServiceContainer.ts:195
注册服务实例
直接注册已创建的实例,自动视为单例。
Type Parameters
T
T extends IService
Parameters
type
ServiceType<T>
服务类型(构造函数,仅用作标识)
instance
T
服务实例
Returns
void
Example
const config = new Config();
container.registerInstance(Config, config);resolve()
resolve<
T>(type):T
Defined in: packages/core/src/Core/ServiceContainer.ts:234
解析服务
Type Parameters
T
T extends IService
Parameters
type
ServiceType<T>
服务类型
Returns
T
服务实例
Throws
如果服务未注册或存在循环依赖
Example
const timer = container.resolve(TimerManager);tryResolve()
tryResolve<
T>(type):null|T
Defined in: packages/core/src/Core/ServiceContainer.ts:307
尝试解析服务
如果服务未注册,返回null而不是抛出异常。
Type Parameters
T
T extends IService
Parameters
type
ServiceType<T>
服务类型
Returns
null | T
服务实例或null
Example
const timer = container.tryResolve(TimerManager);
if (timer) {
timer.schedule(...);
}isRegistered()
isRegistered<
T>(type):boolean
Defined in: packages/core/src/Core/ServiceContainer.ts:321
检查服务是否已注册
Type Parameters
T
T extends IService
Parameters
type
ServiceType<T>
服务类型
Returns
boolean
是否已注册
unregister()
unregister<
T>(type):boolean
Defined in: packages/core/src/Core/ServiceContainer.ts:331
注销服务
Type Parameters
T
T extends IService
Parameters
type
ServiceType<T>
服务类型
Returns
boolean
是否成功注销
clear()
clear():
void
Defined in: packages/core/src/Core/ServiceContainer.ts:356
清空所有服务
Returns
void
getRegisteredServices()
getRegisteredServices():
ServiceType<IService>[]
Defined in: packages/core/src/Core/ServiceContainer.ts:374
获取所有已注册的服务类型
Returns
服务类型数组
updateAll()
updateAll(
deltaTime?):void
Defined in: packages/core/src/Core/ServiceContainer.ts:393
更新所有使用@Updatable装饰器标记的服务
此方法会按优先级顺序遍历所有可更新的服务并调用它们的update方法。 所有服务在注册时已经由@Updatable装饰器验证过必须实现IUpdatable接口。 通常在Core的主更新循环中调用。
Parameters
deltaTime?
number
可选的帧时间间隔(秒)
Returns
void
Example
// 在Core的update方法中
this._serviceContainer.updateAll(deltaTime);getUpdatableCount()
getUpdatableCount():
number
Defined in: packages/core/src/Core/ServiceContainer.ts:404
获取所有可更新的服务数量
Returns
number
可更新服务的数量
getAll()
getAll():
IService[]
Defined in: packages/core/src/Core/ServiceContainer.ts:413
获取所有已实例化的服务实例
Returns
IService[]
所有服务实例的数组