Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NestJS use service without constructor

Tags:

nestjs

This is my BaseRepository

    export class BaseRepository<E> extends Repository<E> {
      constructor(
        private readonly helperService: HelperService,
        target: EntityTarget<E>,
        entityManager: EntityManager,
      ) {
        super(target, entityManager);
      }
    
      async createEntity(entity: E) {
        //
      }
    
      async getEntities(getEntitiesDto: GetEntitiesDto) {
        //
      }
    
      test() {
        // use function of HelperService
      }
    }

This is my UserRepository which extent BaseRepository

    @Injectable()
    export class UserRepository extends BaseRepository<User> {
      constructor(helperService: HelperService, entityManager: EntityManager) {
        super(helperService, User, entityManager);
      }
    }

I wonder is there any way to remove HelperService from constructor of UserRepository but UserRepository still use function test(), may be can change both Repository. I'd like UserRepository looks like:

    @Injectable()
    export class UserRepository extends BaseRepository<User> {
      constructor(entityManager: EntityManager) {
        super(User, entityManager);
      }
    }

or

    @Injectable()
    export class UserRepository extends BaseRepository<User> {
      // no constructor :)
    }

Thank for your attention.

like image 358
Đoàn Đức Bảo Avatar asked Apr 29 '26 12:04

Đoàn Đức Bảo


1 Answers

Even if the injection through constructor is recommended (cf Why are constructor-based injections preferred over property-based injections in nestjs), you can still do a "Property Based Injection" as specified here : https://docs.nestjs.com/providers#property-based-injection

In your case it would look like that:

@Injectable()
export class UserRepository extends BaseRepository<User> {
  @Inject()
  private helperService: HelperService;

  constructor(entityManager: EntityManager) {
    super(User, entityManager);
  }
}
like image 94
Valentin Roche Avatar answered May 05 '26 05:05

Valentin Roche



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!