/** * 依赖注入系统使用示例 */ // 1. 系统启动示例 - 通常在应用入口文件中使用 import { systemBootstrapper } from './SystemBootstrapper' import { ServiceProvider, Inject } from './ServiceProvider' import { ServiceIds } from './ServiceRegistry' // 启动系统(通常在应用入口点调用一次) async function startApplication() { try { console.log('正在启动应用...') // 启动整个系统,包括初始化服务容器和所有服务 const success = await systemBootstrapper.bootstrap() if (!success) { throw new Error('系统启动失败') } console.log('应用启动成功!') // 应用初始化完成后,可以开始使用各种服务 initializeApplication() } catch (error) { console.error('应用启动失败:', error) } } // 应用初始化 function initializeApplication() { // 2. 使用静态服务提供者访问服务 const windowService = ServiceProvider.getWindowFormService() const resourceService = ServiceProvider.getResourceService() console.log('访问服务示例:', { windowServiceAvailable: !!windowService, resourceServiceAvailable: !!resourceService }) // 3. 创建并初始化一个使用依赖注入的组件 const appComponent = new ApplicationComponent() appComponent.initialize() } // 4. 在组件中使用依赖注入 class ApplicationComponent { // 使用装饰器自动注入服务 @Inject(ServiceIds.WINDOW_FORM_SERVICE) private windowFormService: any @Inject(ServiceIds.RESOURCE_SERVICE) private resourceService: any @Inject(ServiceIds.LIFECYCLE_MANAGER) private lifecycleManager: any initialize() { console.log('组件初始化,服务已注入:', { windowFormService: !!this.windowFormService, resourceService: !!this.resourceService, lifecycleManager: !!this.lifecycleManager }) // 使用注入的服务 this.setupComponent() } private setupComponent() { // 示例:使用窗口服务创建一个新窗口 // 注意:这只是示例代码,实际使用时需要根据具体服务API调整 console.log('组件正在使用注入的服务设置UI...') } } // 5. 动态获取服务示例 function dynamicServiceExample(serviceId: string) { // 使用get方法动态获取服务 try { const service = ServiceProvider.getServiceById(serviceId as any) console.log(`动态获取服务[${serviceId}]:`, !!service) return service } catch (error) { console.error(`无法获取服务[${serviceId}]:`, error) return null } } // 导出示例函数供其他文件使用 export { startApplication, dynamicServiceExample, ApplicationComponent } // 注意:在实际应用中,你会在main.ts或应用入口文件中调用startApplication() // startApplication(); // 取消注释以启动应用