fontcolor_theme
Deepkit HTTP

依存性注入

ルーターの関数、コントローラクラス、およびコントローラーメソッドは任意の依存関係を定義でき、これらは依存性注入コンテナによって解決されます。たとえば、データベース抽象化やロガーに簡便にアクセスできます。

たとえば、データベースがプロバイダとして登録されていれば、注入できます:

class Database {
    //...
}

const app = new App({
    providers: [
        Database,
    ],
});

関数API:

router.get('/user/:id', async (id: number, database: Database) => {
    return await database.query(User).filter({id}).findOne();
});

コントローラAPI:

class UserController {
    constructor(private database: Database) {}

    @http.GET('/user/:id')
    async userDetail(id: number) {
        return await this.database.query(User).filter({id}).findOne();
    }
}

//あるいはメソッド内に直接
class UserController {
    @http.GET('/user/:id')
    async userDetail(id: number, database: Database) {
        return await database.query(User).filter({id}).findOne();
    }
}

詳細は 依存性注入 を参照してください。

スコープ

すべてのHTTPコントローラと関数ルートは、http 依存性注入スコープ内で管理されます。HTTPコントローラは各HTTPリクエストごとにインスタンス化されます。これは、両者が http スコープに登録されたプロバイダにアクセスできることも意味します。さらに、@deepkit/httpHttpRequestHttpResponse を依存関係として利用できます。deepkit フレームワークを使用している場合は、@deepkit/frameworkSessionHandler も利用可能です。

import { HttpResponse } from '@deepkit/http';

router.get('/user/:id', (id: number, request: HttpRequest) => {
});

router.get('/', (response: HttpResponse) => {
    response.end('Hello');
});

各HTTPリクエストごとにサービスをインスタンス化するなどの目的で、プロバイダを http スコープに配置すると便利な場合があります。HTTPリクエストの処理が完了すると、http スコープのDIコンテナは削除され、その結果、すべてのプロバイダインスタンスはガベージコレクタ(GC)の対象となりクリーンアップされます。

http スコープにプロバイダを配置する方法については 依存性注入のスコープ を参照してください。

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