fontcolor_theme
Deepkit RPC

Dependency Injection

Controller-Klassen werden vom Dependency Injection Container aus @deepkit/injector verwaltet. Bei Verwendung des Deepkit Framework haben diese Controller automatisch Zugriff auf die Provider der Module, die den Controller bereitstellen.

Im Deepkit Framework werden Controller im Dependency Injection Scope rpc instanziiert, wodurch alle Controller automatisch auf verschiedene Provider aus diesem Scope zugreifen können. Diese zusätzlichen Provider sind HttpRequest (optional), RpcInjectorContext, SessionState, RpcKernelConnection und ConnectionWriter.

import { RpcKernel, rpc } from '@deepkit/rpc';
import { App } from '@deepkit/app';
import { Database, User } from './database';

@rpc.controller('/main')
class Controller {
    constructor(private database: Database) {
    }

    @rpc.action()
    async getUser(id: number): Promise<User> {
        return await this.database.query(User).filter({ id }).findOne();
    }
}

new App({
    providers: [{ provide: Database, useValue: new Database }]
    controllers: [Controller],
}).run();

Wenn jedoch ein RpcKernel manuell instanziiert wird, kann auch ein DI Container übergeben werden. Der RPC-Controller wird dann über diesen DI Container instanziiert. Das ist nützlich, wenn Sie @deepkit/rpc in einer Umgebung außerhalb des Deepkit Framework verwenden möchten, wie z. B. Express.js.

import { RpcKernel, rpc } from '@deepkit/rpc';
import { InjectorContext } from '@deepkit/injector';
import { Database, User } from './database';

@rpc.controller('/main')
class Controller {
    constructor(private database: Database) {
    }

    @rpc.action()
    async getUser(id: number): Promise<User> {
        return await this.database.query(User).filter({ id }).findOne();
    }
}

const injector = InjectorContext.forProviders([
    Controller,
    { provide: Database, useValue: new Database },
]);
const kernel = new RpcKernel(injector);
kernel.registerController(Controller);

Siehe Dependency Injection, um mehr zu erfahren.

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