Files
gridpilot.gg/docs/architecture/website/WEBSITE_DI_RULES.md
2026-01-11 14:04:48 +01:00

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 ContainerProvider and 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: