Как мне вставить что-то в переменную? - PullRequest
0 голосов
/ 03 марта 2020

У меня есть служба, предоставляемая в модуле:

import { Module } from '@nestjs/common';
import { SomethingService } from './something.service';

@Module({
  providers: [SomethingService]
})
export class SomethingModule {}

В другом файле я хочу добавить эту службу в константу. С typedi я бы сделал что-то вроде следующего:

import { Container } from 'typedi';
const service = Container.get(SomethingService);

Как мне добиться этого с помощью Nest. js?

1 Ответ

0 голосов
/ 03 марта 2020

Система естественного ввода-вывода Nest осуществляет внедрение зависимостей через constructor. Внедрение значения обычно выглядит следующим образом:

@Injcetable()
export class SomeAwesomeClass {

  constructor(private readonly somethingService: SomethingService) {}
}

Nest вычисляет, что вы вводите через имя класса, много размышляя. Если по какой-то причине вам нужно сделать инъекцию в свойство , вы можете сделать что-то вроде:

@Injectable()
export class SomeAwesomeClass {

  @Inject()
  private somethingService: SomethignService;
}

И Nest должен быть в состоянии разрешить инъекцию хотя обычно внедрение на основе конструктора предпочтительнее, так как оно более надежно и стандартно подходит для большинства приложений Nest.

Убедитесь, что в метаданных вашего модуля вы также экспортируете поставщика, а затем импортируете модуль поставщика в модуль, в который будет введен поставщик. Например:

@Module({
  providers: [SomethingService],
  exports: [SomethingService],
})
export class SomethingModule {}
@Module({
  imports: [SomethingModule],
  providers: [OtherService],
})
export class OtherModule {}
@Injectable()
export class OtherService {
  constructor(private readonly somethingService: SomethingService) {}
}
...