TypeScript Academy · Lektion

Constructor Injection

Injizieren Sie Abhängigkeiten sauber über Konstruktoren.

Lektion 2 von 413 Schritte

Constructor Injection ist eine kostenlose TypeScript Academy-Lektion auf CoddyKit. Dies ist Lektion 2 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.

Constructor Injection im Detail

Constructor Injection deklariert jede Abhängigkeit als Konstruktorparameter. Das Objekt ist vollständig verdrahtet, sobald es existiert. Dadurch können erforderliche Kollaborateure nicht vergessen werden.

Parameter-Properties

TypeScript kann eine Abhängigkeit in einem Schritt deklarieren und zuweisen, indem am Parameter ein Zugriffsmodifizierer verwendet wird. private readonly erstellt das Feld automatisch und weist ihm den Wert zu.

interface Mailer { send(to: string, body: string): void; }
class Notifier {
  constructor(private readonly mailer: Mailer) {}
}

Interface-basierte Abhängigkeiten

Wenn Sie von einem Interface statt von einer Klasse abhängen, entkoppeln Sie den Verwender von jeder bestimmten Implementierung. Jedes Objekt, das dem Interface entspricht, kann bereitgestellt werden.

interface Mailer { send(to: string, body: string): void; }
class SmtpMailer implements Mailer {
  send(to: string, body: string) { console.log("SMTP ->", to); }
}

Verdrahtung am Composition Root

Der Ort, an dem der Objektgraph erstellt wird, ist der Composition Root. Dort wählen Sie konkrete Implementierungen aus und injizieren sie.

class Notifier {
  constructor(private readonly mailer: Mailer) {}
  notify(to: string) { this.mailer.send(to, "hello"); }
}
const app = new Notifier(new SmtpMailer());
app.notify("a@b.com");

Implementierungen austauschen

Da die Abhängigkeit ein Interface ist, können Sie eine völlig andere Implementierung bereitstellen, ohne Notifier anzufassen. Das ist die zentrale Flexibilität von DI.

class FakeMailer implements Mailer {
  sent: string[] = [];
  send(to: string) { this.sent.push(to); }
}
const fake = new FakeMailer();
new Notifier(fake).notify("x@y.com");
console.log(fake.sent); // ["x@y.com"]

Testen ohne echte Ein-/Ausgabe

Wenn Sie den Fake-Mailer injizieren, kann ein Test überprüfen, was gesendet worden wäre – ganz ohne echte E-Mail. Der Test ist schnell, deterministisch und isoliert.

const fake = new FakeMailer();
new Notifier(fake).notify("test@site");
console.log(fake.sent.length === 1); // true

Mehrere Abhängigkeiten

Listen Sie so viele Abhängigkeiten auf wie nötig. Jede ist explizit, typisiert und erforderlich, sodass die Anforderungen der Klasse auf einen Blick erkennbar bleiben.

interface Logger { log(m: string): void; }
class Notifier {
  constructor(
    private readonly mailer: Mailer,
    private readonly logger: Logger,
  ) {}
}

readonly verhindert Neuzuweisungen

Wenn Sie injizierte Felder mit readonly markieren, können sie während der Lebensdauer des Objekts nicht ausgetauscht werden. Dadurch bleiben seine Kollaborateure stabil und vorhersehbar.

class Notifier {
  constructor(private readonly mailer: Mailer) {}
  // this.mailer = ... would be a compile error
}

Kein verstecktes new im Inneren

Eine Klasse, die Constructor Injection verwendet, sollte ihre Kollaborateure nicht intern mit new erstellen. Alle Abhängigkeiten kommen über den Konstruktor, wodurch die Kopplung explizit bleibt.

Erforderlich oder optional

Erforderliche Abhängigkeiten gehören in den Konstruktor. Wirklich optionale Abhängigkeiten können standardmäßig eine No-op-Implementierung verwenden, die weiterhin übergeben und nicht intern erstellt wird.

const noopLogger: Logger = { log() {} };
new Notifier(new SmtpMailer(), noopLogger);

Zusammenfassung der Vorteile

Constructor Injection macht Abhängigkeiten explizit, Objekte vollständig initialisiert, Implementierungen austauschbar und Tests unkompliziert. Aus gutem Grund ist sie der Standardstil für DI.

Kurztest

Kurzer Test zu dieser Lektion.

Zusammenfassung

Constructor Injection deklariert Abhängigkeiten als Parameter, die häufig als private readonly mit einem Interface typisiert sind. Der Composition Root wählt die Implementierungen aus; Tests übergeben Fakes. Objekte sind immer vollständig verdrahtet, und Kollaborateure können ausgetauscht werden, ohne die Klasse zu bearbeiten.

Kostenlos starten

Lerne TypeScript mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
101
Lektionen
352

Häufig gestellte Fragen

Ist die Lektion „Constructor Injection“ kostenlos?

Ja — der vollständige Text von „Constructor Injection“ 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 „Constructor Injection“?

Injizieren Sie Abhängigkeiten sauber über Konstruktoren. 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 2 von 4.

Wie lange dauert die Lektion „Constructor Injection“?

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