1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NestJSにおけるDIのまとめ

Posted at

Q
ProvidersとModuleの違いは?

Provider:機能を提供するもの。注入可能。
Module:Providerをまとめたもの

Q
何故、ModuleのControllersプロパティにControllerをセットするとexportsプロパティにセットしなくても使えるのか?

コントローラーはアプリケーション全体で自動的に解決されそのルートはすべてのモジュールから利用可能になるため

Q
Moduleのプロパティの種類、使い分けは?

imports:他のプロバイダ、モジュールがエクスポートしたプロバイダ、モジュールを利用するためにインポートするリスト
controllers:現在のモジュールに含まれるコントローラーのリスト
providers:現在のモジュールで提供され(場合によってエクスポートされる)他のモジュールから注入できるプロバイダのリスト
exports:現在のモジュールが他のモジュールに公開するプロバイダのリスト

Q
Dependency Injection(DI)依存性注入とは

インターフェイスだけ用意し必要に応じて外部からクラス(依存性のあるもの)などを提供(注入)する

Q
DIトークンとは?

コード内でユニークな識別子(定数文字列等)
特定の依存関係を注入するために使われるキー

//サンプル
@NgModule({
    providers: [
        // このトークンに対して特定の値を提供します。
        { provide: MY_DI_TOKEN, useValue: 'Hello World' }
    ],
    ...
})
export class AppModule { }

// 後でこのトークンを使って依存性を注入できます。
constructor(@Inject(MY_DI_TOKEN) private value: string) {
    console.log(this.value); // "Hello World"
}

Q
providerの定義の仕方

@Module({
  providers: [ // providers配列で依存関係注入(DI)プロバイダを定義します。
    {
      provide: 'ASYNC_CONNECTION', // 'ASYNC_CONNECTION'というトークン用のプロバイダを定義します。
      useFactory: async (configService: ConfigService) => { // useFactoryは非同期接続を作成するための工場(ファクトリー)関数を提供します。
        const config = await configService.getConfig(); // 設定サービスから設定を取得します。
        return await YourService(config); // 取得した設定を使用して接続を作成します。
      },
      inject: [ConfigService], // Factory関数で必要な依存関係を注入します。ここではConfigServiceが必要とされます。
    },
  ],
})
export class AppModule {} // AppModuleというモジュールをエクスポートします。

注入されるサービスは`Injectale()デコレータで装飾する必要がある

import { Injectable } from '@nestjs/common';

@Injectable()
export class YourService {
    private connection: Promise<Connection>;
  // ...
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?