Files
vue-desktop/src/services/di/ServiceRegistry.ts

178 lines
4.8 KiB
TypeScript
Raw Normal View History

2025-10-11 11:30:44 +08:00
import type { IServiceContainer, ServiceFactory } from './IServiceContainer'
import { ServiceContainerImpl } from './ServiceContainerImpl'
/**
* ID常量
*/
export enum ServiceIds {
RESOURCE_SERVICE = 'resourceService',
WINDOW_FORM_SERVICE = 'windowFormService',
SANDBOX_ENGINE = 'sandboxEngine',
LIFECYCLE_MANAGER = 'lifecycleManager',
SYSTEM_SERVICE = 'systemService',
EVENT_BUILDER = 'eventBuilder',
EXTERNAL_APP_DISCOVERY = 'externalAppDiscovery',
ERROR_HANDLER = 'errorHandler'
}
/**
*
*
*/
export class ServiceRegistry {
private static instance: ServiceRegistry
private container: IServiceContainer
private constructor() {
this.container = new ServiceContainerImpl()
}
/**
*
*/
public static getInstance(): ServiceRegistry {
if (!ServiceRegistry.instance) {
ServiceRegistry.instance = new ServiceRegistry()
}
return ServiceRegistry.instance
}
/**
*
*/
public getContainer(): IServiceContainer {
return this.container
}
/**
*
*
*/
public registerAllServices(): void {
// 注册基本服务 - 这些服务没有其他依赖
this.registerEventBuilder()
this.registerExternalAppDiscovery()
// 注册核心服务 - 按照依赖关系顺序注册
this.registerResourceService()
this.registerWindowFormService()
this.registerSandboxEngine()
this.registerLifecycleManager()
this.registerSystemService()
}
/**
*
*/
private registerEventBuilder(): void {
this.container.register(ServiceIds.EVENT_BUILDER, async () => {
const { EventBuilderImpl } = await import('@/events/impl/EventBuilderImpl')
return new EventBuilderImpl()
})
}
/**
*
*/
private registerExternalAppDiscovery(): void {
this.container.register(ServiceIds.EXTERNAL_APP_DISCOVERY, async () => {
// 延迟导入避免循环依赖
const { externalAppDiscovery } = await import('../ExternalAppDiscovery')
return externalAppDiscovery
})
}
/**
*
*/
private registerResourceService(): void {
this.container.register(
ServiceIds.RESOURCE_SERVICE,
async (container) => {
// 延迟导入避免循环依赖
const { ResourceService } = await import('../ResourceService')
return new ResourceService(container.getService(ServiceIds.EVENT_BUILDER))
},
[ServiceIds.EVENT_BUILDER]
)
}
/**
*
*/
private registerWindowFormService(): void {
this.container.register(
ServiceIds.WINDOW_FORM_SERVICE,
async (container) => {
// 延迟导入避免循环依赖
const { WindowFormService } = await import('../WindowFormService')
return new WindowFormService(container.getService(ServiceIds.EVENT_BUILDER))
},
[ServiceIds.EVENT_BUILDER]
)
}
/**
*
*/
private registerSandboxEngine(): void {
this.container.register(
ServiceIds.SANDBOX_ENGINE,
async (container) => {
// 延迟导入避免循环依赖
const { ApplicationSandboxEngine } = await import('../ApplicationSandboxEngine')
return new ApplicationSandboxEngine(
container.getService(ServiceIds.RESOURCE_SERVICE),
container
)
},
[ServiceIds.RESOURCE_SERVICE]
)
}
/**
*
*/
private registerLifecycleManager(): void {
this.container.register(
ServiceIds.LIFECYCLE_MANAGER,
async (container) => {
// 延迟导入避免循环依赖
const { ApplicationLifecycleManager } = await import('../ApplicationLifecycleManager')
return new ApplicationLifecycleManager(
container.getService(ServiceIds.RESOURCE_SERVICE),
container.getService(ServiceIds.SANDBOX_ENGINE),
container.getService(ServiceIds.WINDOW_FORM_SERVICE)
)
},
[
ServiceIds.RESOURCE_SERVICE,
ServiceIds.SANDBOX_ENGINE,
ServiceIds.WINDOW_FORM_SERVICE,
ServiceIds.EXTERNAL_APP_DISCOVERY
]
)
}
/**
*
*/
private registerSystemService(): void {
this.container.register(
ServiceIds.SYSTEM_SERVICE,
async (container) => {
// 延迟导入避免循环依赖
const { SystemServiceIntegration } = await import('../SystemServiceIntegration')
return new SystemServiceIntegration(container)
},
[
ServiceIds.RESOURCE_SERVICE,
ServiceIds.WINDOW_FORM_SERVICE,
ServiceIds.SANDBOX_ENGINE,
ServiceIds.LIFECYCLE_MANAGER,
ServiceIds.EVENT_BUILDER
]
)
}
}