0Pricing
TypeScript Academy · Lektion

DI-Container mit InversifyJS

Registrieren und lösen Sie Services mit einem Container auf.

DI-Container mit InversifyJS ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des TypeScript Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum ein DI-Container?

Das manuelle Verdrahten großer Objektgraphen ist mühsam und fehleranfällig. Ein DI-Container registriert, wie jede Abhängigkeit erstellt wird, und löst sie automatisch auf. InversifyJS ist ein beliebter TypeScript-Container.

Installieren und aktivieren

InversifyJS verwendet Decorators und Reflection-Metadaten. Sie importieren aus inversify und aktivieren experimentalDecorators sowie reflect-metadata.

import "reflect-metadata";
import { Container, injectable, inject } from "inversify";

Klassen mit @injectable markieren

Der Decorator @injectable() teilt dem Container mit, dass eine Klasse erstellt und injiziert werden kann. Jede Klasse, die der Container erstellt, benötigt ihn.

import { injectable } from "inversify";

@injectable()
class ConsoleLogger {
  log(m: string) { console.log(m); }
}

Abhängigkeiten mit @inject deklarieren

Verwenden Sie @inject(token) für Konstruktorparameter, um dem Container mitzuteilen, welche Bindung bereitgestellt werden soll. Das Token identifiziert die Abhängigkeit.

@injectable()
class OrderService {
  constructor(@inject("Logger") private logger: ConsoleLogger) {}
  place() { this.logger.log("placed"); }
}

Einen Container erstellen

Ein Container enthält alle Bindings Ihrer Anwendung. Sie erstellen ihn beim Start und registrieren darin die Abhängigkeiten.

import { Container } from "inversify";
const container = new Container();

Ein Interface an eine Implementierung binden

Die Fluent API bind<T>(token).to(Impl) ordnet ein Token, häufig ein Interface, einer konkreten Klasse zu, die der Container instanziiert.

interface Logger { log(m: string): void; }
container.bind<Logger>("Logger").to(ConsoleLogger);

Services auflösen

container.get<T>(token) erstellt den angeforderten Service und erstellt und injiziert seine Abhängigkeiten rekursiv für Sie.

container.bind<OrderService>(OrderService).toSelf();
const svc = container.get<OrderService>(OrderService);
svc.place();

Implementierungen austauschen

Um einen anderen Logger zu verwenden, binden Sie das Token an eine andere Klasse. Die Verwender bleiben unverändert, da sie vom Token und nicht von der konkreten Klasse abhängen.

@injectable()
class SilentLogger implements Logger { log() {} }
container.rebind<Logger>("Logger").to(SilentLogger);

Singleton-Scope

Standardmäßig kann jeder Aufruf von get eine neue Instanz erstellen. Verwenden Sie inSingletonScope(), um eine Instanz in der gesamten Anwendung gemeinsam zu verwenden.

container.bind<Logger>("Logger").to(ConsoleLogger).inSingletonScope();

Mit dem Container testen

In Tests können Sie einen neuen Container erstellen und Fakes binden. So erhalten Sie dieselben Vorteile bei der Verdrahtung und isolieren gleichzeitig die zu testende Einheit.

const testContainer = new Container();
testContainer.bind<Logger>("Logger").to(SilentLogger);

Kompromisse bei Containern

Container verringern bei großen Objektgraphen den Boilerplate-Code, fügen aber eine Abhängigkeit, Decorators und Indirektion hinzu. Bei kleinen Anwendungen ist manuelle Constructor Injection oft klarer.

Kurzer Test

Kurzer Test zu dieser Lektion.

Zusammenfassung

InversifyJS verwendet @injectable, @inject(token) und einen Container. Sie führen bind<Interface>(token).to(Impl) aus, und container.get löst den Abhängigkeitsgraphen automatisch auf. Dafür werden reflect-metadata und Decorators benötigt – weniger Boilerplate wird mit zusätzlicher Indirektion erkauft.

Häufig gestellte Fragen

Ist die Lektion „DI-Container mit InversifyJS“ kostenlos?

Ja — der vollständige Text von „DI-Container mit InversifyJS“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des TypeScript Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der TypeScript Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „DI-Container mit InversifyJS“?

Registrieren und lösen Sie Services mit einem Container auf. Du übst TypeScript Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um TypeScript Academy zu starten?

Keine Vorkenntnisse erforderlich. TypeScript Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „DI-Container mit InversifyJS“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser TypeScript Academy-Lektion Code schreiben und ausführen?

Ja. Jede TypeScript Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Grundlagen der Inversion of Control
  2. Constructor Injection
  3. DI-Container mit InversifyJS
  4. Typsichere Service-Tokens
← Zurück zu TypeScript Academy