Использование фабрики для создания контроллера - PullRequest
0 голосов
/ 28 февраля 2019

Мне было интересно, могу ли я использовать фабрику для инициализации контроллера, а затем добавить его в модуль.Код может выглядеть примерно так, но это не работает:

const controllerFactory = {
  provide: DefinitionController,
  useFactory: async (service: DefinitionService) => {
    //initialization of controller
    return new DefinitionController();
  },
  inject: [DefinitionService],
};
@Module({
  controllers: [controllerFactory],
  providers: [DefinitionService],
})
export class DefinitionModule {}

Похоже, использование фабрик для контроллеров не поддерживается, но я не уверен.Есть пример использования фабрики для провайдеров , но я не могу найти ничего для контроллера в документации или в Google.

1 Ответ

0 голосов
/ 28 февраля 2019

Невозможно определить ваш контроллер с асинхронной фабрикой, сравнимой с пользовательскими провайдерами.Вы не можете добавить динамические конечные точки / маршруты, если не используете собственный экземпляр express / fastify:

В настоящее время невозможно динамически зарегистрировать маршрут, кроме как с использованием внутреннего экземпляра HTTP / Fastify / Express

Существует проблема , в которой обсуждается модуль динамической маршрутизации, но, вероятно, это не будет частью гнезда очень скоро:

В настоящий момент оба Камилаи я действительно занят, так что эта проблема может занять некоторое время - кроме того, что кто-то другой берет на себя задачу:)


Но вы можете использовать событие жизненного цикла OnModuleInit , чтобывыполнить статическую инициализацию:

@Injectable()
export class DefinitionController implements OnModuleInit {
  onModuleInit() {
    console.log(`Initialization...`);
  }

Он будет вызываться один раз, когда ваше приложение запускается и имеет доступ к введенным провайдерам в вашем контроллере, например, DefinitionService.

...