예를 들어, Module-A에 있는 Service-A와 Module-B에 있는 Service-B가 서로 의존주입을 하려 하면 문제가 발생하여 실행되지 않습니다.
이를 해결하기 위한 간단한 방법은 "forwardRef" 입니다.
@Module({
imports: [ModuleBModule],
providers: [ModuleAService],
exports: [ModuleAService],
})
export class ModuleAModule {}
@Module({
imports: [ModuleAModule],
providers: [ModuleBService],
exports: [ModuleBService],
})
export class ModuleBModule {}
위와 같이 두 모듈이 서로를 import 하게 하면, "Nest cannot create the module instance" 에러 메시지를 남기며 어플리케이션이 실행되지 않습니다.
@Module({
imports: [forwardRef(() => ModuleBModule)],
providers: [ModuleAService],
exports: [ModuleAService],
})
export class ModuleAModule {}
@Module({
imports: [forwardRef(() => ModuleAModule)],
providers: [ModuleBService],
exports: [ModuleBService],
})
export class ModuleBModule {}
위와같이 변경하면 순환 참조 문제가 해결됩니다..
하지만, ModuleAService와 ModuleBService가 서로를 참조하면 여전히 문제가 발생합니다.
이를 해결하기 위해서는 ModuleAService와, ModuleBService에서도 forwardRef로 서로를 명시해야 합니다.
@Injectable()
export class ModuleAService {
constructor(
@Inject(forwardRef(() => ModuleBService))
private readonly moduleBService: ModuleBService) {
}
}
@Injectable()
export class ModuleBService {
constructor(
@Inject(forwardRef(() => ModuleAService))
private readonly moduleAService: ModuleAService) {
}
}
ㅎㅎ 감사합니다.