31 lines
913 B
Markdown
31 lines
913 B
Markdown
# Website DI Rules (Inversify)
|
|
|
|
This repo uses Inversify DI under [apps/website/lib/di](apps/website/lib/di/index.ts:1).
|
|
|
|
## 1) Non-negotiable safety rule
|
|
|
|
No stateful service instances may be shared across requests.
|
|
|
|
Reason: Next.js server execution is concurrent; shared state causes cross-request leakage.
|
|
|
|
## 2) Rules by module type
|
|
|
|
### 2.1 `page.tsx` (server)
|
|
|
|
- MUST NOT access the DI container directly.
|
|
- MUST call a PageQuery only.
|
|
|
|
### 2.2 Page Queries (server)
|
|
|
|
- SHOULD prefer explicit construction (manual wiring).
|
|
- MAY use DI only if all resolved services are stateless and safe for concurrent requests.
|
|
|
|
### 2.3 Client modules
|
|
|
|
- MAY use DI via `ContainerProvider` and hooks (example: `useInject`).
|
|
|
|
## 3) Container singleton warning
|
|
|
|
[`ContainerManager`](apps/website/lib/di/container.ts:61) holds a singleton container. Treat it as **unsafe for server request scope** unless proven otherwise.
|
|
|