보뇨 다이어리

Nest can't resolve dependencies of the ~Service 에러 본문

컴퓨터 관련/Node 정보

Nest can't resolve dependencies of the ~Service 에러

보뇨 2024. 11. 25. 16:20
반응형

NestJS 다시 공부할겸 겸사겸사 내용 정리

DI 를 통해서 제어역전이 일어나는데 Interface 를 통해 의존을 넣을경우 @Inject 없을때 제목과 같은 에러가 나옴

1
2
3
4
5
6
7
8
9
10
[Nest] 59577  - 11/25/20244:19:43 PM     LOG [NestFactory] Starting Nest application...
[Nest] 59577  - 11/25/20244:19:43 PM   ERROR [ExceptionHandler] Nest can't resolve dependencies of the AppService (?). Please make sure that the argument "AppSimpleRepository" at index [0] is available in the AppModule context.
Potential solutions:
- Is AppModule a valid NestJS module?
- If "AppSimpleRepository" is a provider, is it part of the current AppModule?
- If "AppSimpleRepository" is exported from a separate @Module, is that module imported within AppModule?
  @Module({
    imports: [ /* the Module containing "AppSimpleRepository" */ ]
  })
cs

 

해결방법으로는 @Inject 까지 직접 명시적으로 적어줘야함

이때 당연히 ~Module 내에서도 provide 와 useClass 선언까지 해줘야함

 

구현체가 하나밖에 없는데도 이렇게 명시적으로 적어줘야한다는게 좀 특이한데 좀더 알게되면 적어두도록하겠음!

 

1
2
3
4
5
6
7
8
9
10
11
12
13
import { Injectable } from '@nestjs/common';
 
export interface AppRepository {
  getHello(): string;
}
 
@Injectable()
export class AppSimpleRepository implements AppRepository {
  getHello(): string {
    return 'Hello World!!!!';
  }
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { Inject, Injectable } from '@nestjs/common';
import { AppRepository } from './app.repository';
 
@Injectable()
export class AppService {
  constructor(
    @Inject('AppSimpleRepository')
    private readonly appRepository: AppRepository,
  ) {}
 
  getHello(): string {
    return this.appRepository.getHello();
  }
}
 
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AppSimpleRepository } from './app.repository';
 
@Module({
  imports: [],
  controllers: [AppController],
  providers: [
    AppService,
    {
      provide: 'AppSimpleRepository',
      useClass: AppSimpleRepository,
    },
  ],
})
export class AppModule {}
 
cs

 

 

반응형