fontcolor_theme
Deepkit RPC

Dependency Injection

Controller 클래스는 @deepkit/injector의 Dependency Injection Container에 의해 관리됩니다. Deepkit Framework를 사용할 때, 이들 Controller는 해당 Controller를 제공하는 모듈의 providers에 자동으로 접근할 수 있습니다.

Deepkit Framework에서는 Controller가 Dependency Injection Scope rpc에서 인스턴스화되며, 이로 인해 모든 Controller는 이 스코프의 다양한 providers에 자동으로 접근할 수 있습니다. 추가로 제공되는 providers는 HttpRequest(옵션), RpcInjectorContext, SessionState, RpcKernelConnection, 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();

그러나 RpcKernel을 수동으로 인스턴스화할 때는 DI Container를 함께 전달할 수도 있습니다. 그러면 RPC Controller는 이 DI Container를 통해 인스턴스화됩니다. 이는 Express.js와 같은 Deepkit Framework가 아닌 환경에서 @deepkit/rpc를 사용하려는 경우에 유용합니다.

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);

자세한 내용은 Dependency Injection을 참조하세요.

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