Skip to content

Framework-Adapter ​

InferDI-Adapter verbinden exakte Containertypen mit Framework-Lebenszyklen. HTTP-Adapter erstellen einen Request-Scope und stellen ihn am frameworküblichen Ort bereit. Der React-Adapter liefert typisierte Kontexte und kann einen clientseitig erstellten Kind-Scope verwalten.

Die Adapter verwalten den Lebenszyklus von Request-Scopes. Das Kernpaket bleibt ohne Abhängigkeiten und ergänzt weder Dekoratoren noch Controller-Suche, Handler-Parameterinjektion oder automatische Routenerkennung.

Pakete ​

PaketFrameworkScope-ZugriffNur Root
@inferdi/fastifyFastify v5request.dija
@inferdi/honoHono v4c.var.dinein
@inferdi/koaKoa v3ctx.state.dinein
@inferdi/expressExpress 5req.dinein
@inferdi/elysiaElysia v1context.dija
@inferdi/reactReact 19React-Kontextexterner Provider

React verwendet den Komponentenlebenszyklus. Ein externer Provider gibt seinen Container nie frei; ein verwalteter ScopeProvider erstellt den Kind-Scope nach dem Commit und gibt ihn immer frei. Siehe React-Adapter.

Gemeinsamer Lebenszyklusvertrag ​

Im Scope-Modus durchlaufen HTTP-Anfragen dieselben Schritte:

  1. Erstellen: Bei Anfragebeginn einen Scope vom Root ableiten (createScope, standardmäßig root.createScope()).
  2. Bereitstellen: Hono, Koa, Express und Elysia stellen den Scope vor dem Setup am nativen Ort bereit. Fastify veröffentlicht request.di nach erfolgreichem Setup; bei Setup-Fehlern erscheint der Scope nur vorübergehend für die Freigabehooks. Fehlerhandler erhalten dort keinen halb aufgebauten Scope.
  3. Einrichten: Optionales, auch asynchrones setupScope führt zusätzliche Initialisierung vor den Handlern aus.
  4. Verarbeiten: Routen- und Fehlerhandler lösen Services aus dem Scope auf.
  5. Freigeben: Am sicheren Abschluss des Framework-Lebenszyklus wird disposeScope ausgeführt, standardmäßig scope.dispose(), sofern die Verantwortung nicht übertragen wurde.

Gemeinsame Optionen ​

OptionStandardZweck
containererforderlichRoot; keine automatische Freigabe außer Fastifys optionalem disposeRootOnClose.
createScoperoot.createScope()Scope erstellen und deklarierte Anfrageeingaben übergeben; darf asynchron sein.
setupScopekeinerZusätzliche Initialisierung vor Handlern; darf asynchron sein.
disposeScopescope.dispose()Eigene synchrone oder asynchrone Freigabe.
autoDisposetruefalse oder ein Prädikat mit Ergebnis false überträgt die Freigabe an deinen Code.
onDisposeErroradapterspezifischFastify: request.log.error; Koa: ctx.app.emit('error'); andere: console.error.
skipInferdiDispose(...)—Überträgt die Verantwortung für eine Anfrage, etwa bei Streaming oder Hintergrundarbeit.

Fehler und Ressourcenverantwortung ​

  • Bei Setup-Fehlern bleibt der ursprüngliche Fehler sichtbar. Der halb aufgebaute Scope wird freigegeben. Ein zusätzlicher Freigabefehler geht an onDisposeError oder den Standardempfänger und wird nicht mit dem Setup-Fehler aggregiert.
  • Fehlgeschlagene Requests werden weiterhin freigegeben. skipInferdiDispose unterdrückt nur die Freigabe erfolgreicher Antworten. Express ist die Ausnahme: Behandelte nachgelagerte Routenfehler sind für seine Callback-Middleware nicht erkennbar; der übersprungene Scope bleibt anwendungseigen.
  • autoDispose: false und skipInferdiDispose übertragen die Verantwortung. Dein Code muss den Scope an der passenden Framework-Grenze freigeben. Auch Fehlerpfade respektieren autoDispose: false.
  • Freigabefehler nach Erzeugung einer Antwort werden gemeldet und abgefangen. Die bereits gesendete Antwort kann durch einen späten Freigabefehler nicht beschädigt werden.

Wesentliche Unterschiede ​

AdapterUnterschied
FastifyFreigabe in onResponse, bei Abbruch in onRequestAbort; optionale Root-Freigabe durch disposeRootOnClose.
HonoFreigabe nach await next(); Streaming-Helfer können früher zurückkehren, daher benötigen Streaming-Routen oft skipInferdiDispose.
KoaWartet auf finish oder close der Node-Antwort; normale Stream-Bodies brauchen keinen Skip.
ExpressErkennt behandelte nachgelagerte Routenfehler nicht; fehlgeschlagene übersprungene Requests bleiben anwendungseigen.
ElysiaFreigabe hängt von onAfterResponse ab. Ohne diesen Hook kann der Adapter Scope-Ressourcen nicht freigeben.