forwardRef()

Resolves circular dependencies between providers or modules by deferring reference resolution.

Since NestJS 10/11 Spec ↗

Syntax

forwardRef(() => TypeOrModule)

Parameters

NameTypeRequiredDescription
fn () => any No A thunk returning the class or module referenced later.

Returns

ForwardReference — A wrapper Nest resolves once both sides are constructed.

Examples

import { Injectable, Inject, forwardRef } from '@nestjs/common';

@Injectable()
export class CatsService {
  constructor(
    @Inject(forwardRef(() => DogsService))
    private dogs: DogsService,
  ) {}
}
import { Module, forwardRef } from '@nestjs/common';
import { DogsModule } from './dogs.module';

@Module({ imports: [forwardRef(() => DogsModule)] })
export class CatsModule {}

Notes

Circular dependencies indicate tight coupling and are best avoided by refactoring. When unavoidable, both the injection site and the matching module import must use forwardRef().