NestJS7系から10系にアップグレードする際にサービスのDIではまったので備忘。
サービスのDIでトークンが使用できるがその使い方が7系と10系で変わっていた。
7系で利用されていた例
@Injectable()
export class SampleService {
@Inject('MockService')
private readonly mockService: MockService;
}
10系では上記のような例は利用できず以下のエラーが発生していた。
Error: Nest can't resolve dependencies of the MockService. Please make sure that the "mockService" property is available in the current context.
トークンを指定するためにはドキュメントにあるようにモジュールでトークンにクラスを割り当てる必要がある。
@Module({
providers: [
{
provide: MockService,
useClass: MockServiceImpl,
},
],
})
なんか動くからと実装してると急に動かなくなるよという教訓。