Appearance
Lifecycle Events
Provider는 선택적으로 lifecycle 인터페이스를 구현하여 초기화, 윈도우 연결, 정리 시점에 동작을 정의할 수 있다. 모든 lifecycle 메서드는 등록 순서대로 호출된다.
실행 순서
resolveAll() → 모든 provider 인스턴스 생성
initAll() → OnInit.onInit() 호출
createMainWindow() → OnMainWindowCreate.onMainWindowCreate() 호출
attachWindowAll() → OnWindowAttach.onWindowAttach() 호출
→ IPC 핸들러 등록
disposeAll() → OnDispose.onDispose() 호출 (윈도우 closed 시)각 단계에서 에러가 발생하면 onError 콜백이 호출되고, 나머지 provider의 lifecycle은 계속 실행된다. 단, OnMainWindowCreate는 구현체가 정확히 하나여야 하며 0개 또는 2개 이상이면 부트스트랩이 실패한다.
OnInit
윈도우 생성 전에 호출된다. 설정 로드, 데이터베이스 연결 등 초기화 작업에 사용한다.
ts
import { Injectable, type OnInit } from '@repo/electron-ipc';
@Injectable()
class DatabaseService implements OnInit {
private db!: Database;
onInit() {
this.db = new Database('./app.db');
}
}OnMainWindowCreate
메인 BrowserWindow를 생성하고 반환한다. 앱 전체에서 정확히 하나의 provider만 구현해야 한다. onInit 이후, onWindowAttach 이전에 호출된다.
ts
import { Injectable, type OnMainWindowCreate } from '@repo/electron-ipc';
import { BrowserWindow } from 'electron';
@Injectable()
class WindowService implements OnMainWindowCreate {
onMainWindowCreate(): BrowserWindow {
return new BrowserWindow({
width: 1200,
height: 800,
webPreferences: { preload, contextIsolation: true },
});
}
}프레임워크는 이 메서드가 반환한 윈도우를 이후 OnWindowAttach, forward 구독, OnDispose 등에 전파한다.
OnWindowAttach
윈도우 생성 후 호출된다. 윈도우 참조가 필요한 작업에 사용한다.
ts
import { Injectable, type OnWindowAttach } from '@repo/electron-ipc';
import type { BrowserWindow } from 'electron';
@Injectable()
class TrayService implements OnWindowAttach {
onWindowAttach(window: BrowserWindow) {
// 트레이 아이콘 클릭 시 윈도우 토글
}
}OnDispose
윈도우 closed 이벤트 시 호출된다. 리소스 정리에 사용한다.
ts
import { Injectable, type OnDispose } from '@repo/electron-ipc';
@Injectable()
class DatabaseService implements OnDispose {
onDispose() {
this.db.close();
}
}다음 단계
- EventSource — 메인 → 렌더러 이벤트 push
- Guards — IPC 요청 검증