Skip to content

ECS Framework API v2.2.13


ECS Framework API / ServiceContainer

Class: ServiceContainer

Defined in: packages/core/src/Core/ServiceContainer.ts:95

服务容器

负责管理所有服务的注册、解析和生命周期。 支持依赖注入和服务定位模式。

特点:

  • 单例和瞬时两种生命周期
  • 支持工厂函数注册
  • 支持实例注册
  • 类型安全的服务解析

Example

typescript
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

typescript
// 直接注册类型
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

typescript
// 每次解析都创建新实例
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

typescript
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

typescript
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

typescript
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

ServiceType<IService>[]

服务类型数组


updateAll()

updateAll(deltaTime?): void

Defined in: packages/core/src/Core/ServiceContainer.ts:393

更新所有使用@Updatable装饰器标记的服务

此方法会按优先级顺序遍历所有可更新的服务并调用它们的update方法。 所有服务在注册时已经由@Updatable装饰器验证过必须实现IUpdatable接口。 通常在Core的主更新循环中调用。

Parameters

deltaTime?

number

可选的帧时间间隔(秒)

Returns

void

Example

typescript
// 在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[]

所有服务实例的数组

Released under the MIT License.