fontcolor_theme
Deepkit Injector

Injektion

Es heißt Dependency Injection, da eine Abhängigkeit injiziert wird. Die Injektion erfolgt entweder durch den Benutzer (manuell) oder durch den DI-Container (automatisch).

Konstruktorinjektion

In den meisten Fällen wird die Konstruktorinjektion verwendet. Alle Abhängigkeiten werden als Konstruktor-Argumente angegeben und automatisch vom DI-Container injiziert.

class MyService {
    constructor(protected database: Database) {
    }
}

Optionale Abhängigkeiten sollten entsprechend markiert werden, andernfalls könnte ein Error ausgelöst werden, wenn kein Provider gefunden wird.

class MyService {
    constructor(protected database?: Database) {
    }
}

Eigenschaftsinjektion

Eine Alternative zur Konstruktorinjektion ist die Eigenschaftsinjektion. Diese wird üblicherweise verwendet, wenn die Abhängigkeit optional ist oder der Konstruktor sonst zu voll wäre. Die Properties werden automatisch zugewiesen, sobald die Instanz erstellt wurde (und damit der Konstruktor ausgeführt wurde).

import { Inject } from '@deepkit/core';

class MyService {
    //erforderlich
    protected database!: Inject<Database>;

    //oder optional
    protected database?: Inject<Database>;
}

Parameterinjektion

An verschiedenen Stellen kannst du eine Callback Function definieren, zum Beispiel für HTTP Routes oder CLI Commands. In diesem Fall kannst du Abhängigkeiten als Parameter definieren. Sie werden automatisch vom DI-Container injiziert.

import { Database } from './db';

app.get('/', (database: Database) => {
    //...
});

Injector-Kontext

Falls du Abhängigkeiten dynamisch auflösen möchtest, kannst du InjectorContext injizieren und ihn verwenden, um Abhängigkeiten zu beziehen.

import { InjectorContext } from '@deepkit/injector';

class MyService {
    constructor(protected context: InjectorContext) {
    }

    getDatabase(): Database {
        return this.context.get(Database);
    }
}

Dies ist besonders nützlich bei der Arbeit mit Dependency Injection Scopes.

English中文 (Chinese)한국어 (Korean)日本語 (Japanese)Deutsch (German)