🥺
NestJSのDIを楽にするライブラリを作った
@nestjs-modular/inject
RepositoryやUseCase等が増えるたびに、毎回手動でDIするのが面倒なのでディレクトリまるごとDI出来るライブラリを作っちゃいました。
使用例はこちら
DI毎回手書きするのめんどくさい
import { Module } from '@nestjs/common';
@Module({
providers: [
UserCreateUseCase,
UserDeleteUseCase,
],
exports: [
UserCreateUseCase,
UserDeleteUseCase,
],
controllers: [
TasksController,
],
})
export class UsersModule {}
エンドポイント増える前にこんな感じのコード書いてませんか?
新しくUseCase増えた際にDIするの忘れてて、ビルドエラーになったり・・・
ディレクトリ指定してまるごとDIしちゃおう
import { Module } from '@nestjs/common';
import { InjectConditions, InjectModule } from '@nestjs-modular/inject';
import path from 'path';
const useCases: InjectConditions = {
path: path.resolve(__dirname, './usecases'),
includeFileNames: [/\.usecase$/],
includeExportNames: [/UseCase$/],
};
@Module({
imports: [
InjectModule.forRootAsync({
providers: useCases,
exports: useCases,
}),
],
controllers: [
TasksController,
],
})
export class UsersModule {}
@nestjs-modular/inject
を使うとディレクトリ指定でまるごとDIできちゃいます。
UseCaseが増えても勝手にDIしてくれるので、凡ミスでビルドエラーになる事も無くなります。
仕組み
内部的にはディレクトリを再帰的に探索して、dynamic importするような仕組みになっています。
(指定ディレクトリにファイルが多いと重すぎて使えないかも・・・)
Discussion