di
This commit is contained in:
94
src/services/di/example.ts
Normal file
94
src/services/di/example.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
/**
|
||||
* 依赖注入系统使用示例
|
||||
*/
|
||||
|
||||
// 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(); // 取消注释以启动应用
|
||||
Reference in New Issue
Block a user