Konstruktørinjeksjon
Injiser avhengigheter på en ryddig måte gjennom konstruktører.
Konstruktørinjeksjon er en gratis leksjon i TypeScript Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i TypeScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i TypeScript Academy inneholder totalt 4 leksjoner.
Konstruktørinjeksjon i dybden
Konstruktørinjeksjon erklærer hver avhengighet som en konstruktørparameter. Objektet er ferdig koblet i det øyeblikket det eksisterer, noe som gjør det umulig å glemme obligatoriske samarbeidspartnere.
Parameteregenskaper
TypeScript kan erklære og tilordne en avhengighet i ett trinn ved å bruke en tilgangsmodifikator på parameteren. private readonly oppretter og tilordner feltet automatisk.
interface Mailer { send(to: string, body: string): void; }
class Notifier {
constructor(private readonly mailer: Mailer) {}
}Grensesnittbaserte avhengigheter
Ved å avhenge av et grensesnitt i stedet for en klasse kobles forbrukeren fra en bestemt implementasjon. Alle objekter som samsvarer med grensesnittet, kan leveres inn.
interface Mailer { send(to: string, body: string): void; }
class SmtpMailer implements Mailer {
send(to: string, body: string) { console.log("SMTP ->", to); }
}Kobling ved komposisjonsroten
Stedet der objektgrafen opprettes, kalles komposisjonsroten. Der velger De konkrete implementasjoner og injiserer dem.
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");Bytte implementasjoner
Fordi avhengigheten er et grensesnitt, kan De levere en helt annen implementasjon uten å endre Notifier. Dette er den grunnleggende fleksibiliteten DI gir.
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"]Testing uten ekte I/O
Ved å injisere den falske maileren kan en test kontrollere hva som ville blitt sendt, uten å sende ekte e-post. Testen er rask, deterministisk og isolert.
const fake = new FakeMailer();
new Notifier(fake).notify("test@site");
console.log(fake.sent.length === 1); // trueFlere avhengigheter
List opp så mange avhengigheter som trengs. Hver av dem er eksplisitt, typesatt og obligatorisk, slik at klassens behov er synlige med et øyekast.
interface Logger { log(m: string): void; }
class Notifier {
constructor(
private readonly mailer: Mailer,
private readonly logger: Logger,
) {}
}readonly hindrer ny tilordning
Når injiserte felt merkes som readonly, hindres det at de byttes ut mens objektet lever. Dermed forblir objektets samarbeidspartnere stabile og forutsigbare.
class Notifier {
constructor(private readonly mailer: Mailer) {}
// this.mailer = ... would be a compile error
}Ingen skjult new internt
En klasse som bruker konstruktørinjeksjon, bør ikke opprette samarbeidspartnerne sine med new internt. Alle avhengigheter kommer gjennom konstruktøren, slik at koblingen er eksplisitt.
Obligatoriske kontra valgfrie
Obligatoriske avhengigheter hører hjemme i konstruktøren. Ekte valgfrie avhengigheter kan ha en standardimplementasjon som ikke gjør noe, men den skal fortsatt sendes inn i stedet for å opprettes internt.
const noopLogger: Logger = { log() {} };
new Notifier(new SmtpMailer(), noopLogger);Oppsummering av fordeler
Konstruktørinjeksjon gjør avhengighetene eksplisitte, objektene fullstendig initialiserte, implementasjonene utskiftbare og testene enkle. Det er standardstilen for DI, og det er det en god grunn til.
Hurtigsjekk
En hurtigsjekk av denne leksjonen.
Oppsummering
Konstruktørinjeksjon erklærer avhengigheter som parametere, ofte private readonly, typesatt med et grensesnitt. Komposisjonsroten velger implementasjonene, mens tester sender inn falske objekter. Objektene er alltid fullstendig koblet, og samarbeidspartnerne kan byttes uten at klassen redigeres.
Lær deg TypeScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 101
- Leksjoner
- 352
Ofte stilte spørsmål
Er leksjonen «Konstruktørinjeksjon» gratis?
Ja – hele teksten i «Konstruktørinjeksjon» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av TypeScript Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i TypeScript Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Konstruktørinjeksjon»?
Injiser avhengigheter på en ryddig måte gjennom konstruktører. Du øver på TypeScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med TypeScript Academy?
Ingen tidligere erfaring er nødvendig. TypeScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Konstruktørinjeksjon»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne TypeScript Academy-leksjonen?
Ja. Alle TypeScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Grunnleggende inversion of control
- Konstruktørinjeksjon
- DI-containere med InversifyJS
- Typesikre tjenestetokener