Dev Study
NestJS コース

31. カスタムプロバイダ — useValue / useFactory / useClass

これまでは providers にクラスを並べるだけでしたが、これは { provide: UsersService, useClass: UsersService } の省略形です。providers には provide(トークン)と提供方法の組を明示でき、固定値を渡す useValue、関数で値を組み立てる useFactory、別クラスに差し替える useClass を使い分けられます。トークンには文字列も使えるので、注入側では @Inject("トークン名") で受け取ります。

実務では、設定オブジェクトや外部 SDK のインスタンスを useValue で注入したり、環境変数や条件に応じて生成する値を useFactory で組み立てたりします。useFactory は inject 配列で他のプロバイダ(ConfigService など)を受け取れるため、「設定値を読んで接続クライアントを作る」といった初期化に向いています。useClass は本番と開発で実装を丸ごと差し替えたいときに使います。

下のコードは useFactory の本質「トークン → ファクトリ関数で値を生成し、依存も渡す」を Map で再現したものです。つまずきポイントは、文字列トークンを使うと型推論が効かなくなることで、注入側で @Inject を書き忘れて解決できなくなりがちです。クラスをトークンにできる場合はそちらのほうが安全です。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

TypeScript
サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗