1.2 KiB
1.2 KiB
Website DI Rules (Inversify)
This repo uses Inversify DI under apps/website/lib/di.
Authoritative contract: WEBSITE_CONTRACT.md.
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.
If DI is used on the server, it MUST be request-scoped (a new container per request) and MUST NOT reuse a shared singleton container.
2.3 Client modules
- MAY use DI via
ContainerProviderand hooks (example:useInject).
3) Container singleton warning
ContainerManager holds a singleton container. Treat it as unsafe for server request scope unless proven otherwise.
Strict rule:
ContainerManager.getContainer()is client-only.