di
This commit is contained in:
141
src/services/di/ServiceProvider.ts
Normal file
141
src/services/di/ServiceProvider.ts
Normal file
@@ -0,0 +1,141 @@
|
||||
import { ServiceRegistry, ServiceIds } from './ServiceRegistry'
|
||||
import type { IServiceContainer } from './IServiceContainer'
|
||||
|
||||
/**
|
||||
* 服务提供者
|
||||
* 提供静态方法访问所有系统服务
|
||||
*/
|
||||
export class ServiceProvider {
|
||||
private static container: IServiceContainer | null = null
|
||||
private static initialized = false
|
||||
|
||||
/**
|
||||
* 初始化服务提供者
|
||||
* 注册并初始化所有服务
|
||||
*/
|
||||
public static initialize(): void {
|
||||
if (this.initialized) {
|
||||
return
|
||||
}
|
||||
|
||||
const registry = ServiceRegistry.getInstance()
|
||||
registry.registerAllServices()
|
||||
|
||||
this.container = registry.getContainer()
|
||||
this.container.initialize()
|
||||
|
||||
this.initialized = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取服务实例
|
||||
* @param id 服务ID
|
||||
* @returns 服务实例
|
||||
*/
|
||||
public static getService<T>(id: string): T {
|
||||
if (!this.container) {
|
||||
throw new Error('服务提供者尚未初始化')
|
||||
}
|
||||
return this.container.getService<T>(id)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取资源服务
|
||||
*/
|
||||
public static getResourceService(): any {
|
||||
return this.getService(ServiceIds.RESOURCE_SERVICE)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取窗口表单服务
|
||||
*/
|
||||
public static getWindowFormService(): any {
|
||||
return this.getService(ServiceIds.WINDOW_FORM_SERVICE)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取沙箱引擎
|
||||
*/
|
||||
public static getSandboxEngine(): any {
|
||||
return this.getService(ServiceIds.SANDBOX_ENGINE)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取生命周期管理器
|
||||
*/
|
||||
public static getLifecycleManager(): any {
|
||||
return this.getService(ServiceIds.LIFECYCLE_MANAGER)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统服务
|
||||
*/
|
||||
public static getSystemService(): any {
|
||||
return this.getService(ServiceIds.SYSTEM_SERVICE)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取事件构建器
|
||||
*/
|
||||
public static getEventBuilder(): any {
|
||||
return this.getService(ServiceIds.EVENT_BUILDER)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取外部应用发现服务
|
||||
*/
|
||||
public static getExternalAppDiscovery(): any {
|
||||
return this.getService(ServiceIds.EXTERNAL_APP_DISCOVERY)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取错误处理服务
|
||||
*/
|
||||
public static getErrorHandler(): any {
|
||||
return this.getService(ServiceIds.ERROR_HANDLER)
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否已初始化
|
||||
*/
|
||||
public static isInitialized(): boolean {
|
||||
return this.initialized
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取服务容器(仅用于高级场景)
|
||||
*/
|
||||
public static getContainer(): IServiceContainer | null {
|
||||
return this.container
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建服务工厂函数
|
||||
* @param constructor 服务构造函数
|
||||
* @param dependencyIds 依赖的服务ID数组
|
||||
* @returns 服务工厂函数
|
||||
*/
|
||||
export function createServiceFactory<T>(
|
||||
constructor: new (...args: any[]) => T,
|
||||
dependencyIds: string[] = []
|
||||
): (container: IServiceContainer) => T {
|
||||
return (container: IServiceContainer) => {
|
||||
const dependencies = dependencyIds.map((id) => container.getService(id))
|
||||
return new constructor(...dependencies)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 服务装饰器,用于标记需要注入的服务
|
||||
*/
|
||||
export function Inject(serviceId: string): PropertyDecorator {
|
||||
return (target: Object, propertyKey: string | symbol) => {
|
||||
const descriptor = {
|
||||
get: () => {
|
||||
return ServiceProvider.getService(serviceId)
|
||||
}
|
||||
}
|
||||
Object.defineProperty(target, propertyKey, descriptor)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user