95 lines
2.8 KiB
TypeScript
95 lines
2.8 KiB
TypeScript
/**
|
||
* 依赖注入系统使用示例
|
||
*/
|
||
|
||
// 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(); // 取消注释以启动应用
|