Appearance
Modules
모듈은 관련된 provider와 controller를 하나의 단위로 그룹화한다. 각 기능 영역을 독립적인 모듈로 분리하여 코드를 조직화한다.
@Module(metadata)
@Module() 데코레이터로 provider와 controller를 그룹화한다.
ts
import { Module } from '@repo/electron-ipc';
@Module({
providers: [FileService, LogService],
controllers: [FileController],
})
class FileModule {}ModuleMetadata
| 필드 | 타입 | 설명 |
|---|---|---|
providers | Constructor[] | @Injectable()로 표시된 서비스 클래스 |
controllers | Constructor[] | @Controller()로 표시된 핸들러 클래스 |
모듈 등록
createApp()의 modules 배열에 모듈을 나열한다:
ts
createApp({
modules: [
FileModule,
SettingsModule,
ThemeModule,
],
// ...
});모듈 간 의존성
각 모듈의 provider는 등록 순서대로 resolve된다. 모듈 간 의존성이 있다면 의존되는 모듈을 먼저 나열한다.
ts
// SettingsModule의 SettingsService가 FileModule의 FileService를 inject하는 경우
modules: [
FileModule, // 먼저 등록
SettingsModule, // FileService를 inject 가능
]WARNING
모듈 배열의 순서가 provider 등록 순서를 결정한다. 의존하는 provider가 아직 등록되지 않은 상태에서 inject()를 호출하면 resolve에 실패한다.
다음 단계
- Providers — @Injectable과 inject()로 의존성을 관리하는 방법
- Controllers — @Controller(contract)로 IPC 핸들러를 정의하는 방법