Next.js 14でDI (Constructor Injection) する方法を模索していたところ、TSyringeでお手軽に実現できそうだったので実際に試してみる。
1. ライブラリのインストール
2. デコレータの有効化
3. DIコンテナの初期化とプロバイダの登録
reflect-metadata
をimportしつつ、DIコンテナを初期化し注入したいプロバイダを登録する。
ちなみに基本複数登録することになるかと思うので配列としてプロバイダ達を定義している。
4. Instrumentationの利用
サーバ起動時にDIコンテナの初期化・クラスの登録をするべく、Next.jsのInstrumentation (ver14時点だとexperimental) を利用する。
まずinstrumentationHookを有効化する。
その後プロジェクト直下に作成したinstrumentation.ts
で先ほどのdi.ts
をimportする。
5. インスタンスの注入
下準備が完了したので、とあるクラスに先ほどプロバイダとして登録したクラスのインスタンスを注入してみる。
これで無事動きuserRepository
のメソッドも呼び出せた。
今回はシンプルなConstructor Injectionしかしてないがとりあえず目的は達成できた。
1