使用工厂创建控制器

问题描述 投票:0回答:1

我想知道我是否可以使用工厂初始化控制器然后将其添加到模块中。代码可能看起来像这样,但这不起作用:

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

看起来不支持使用控制器工厂,但我不确定。有一个using factory for providers的例子,但我在文档或谷歌上找不到任何控制器。

javascript node.js typescript nestjs
1个回答
2
投票

使用与自定义提供程序相当的异步工厂来定义控制器是不可能的。除非使用native express / fastify实例,否则无法添加动态端点/路由:

目前,除非使用内部HTTP / Fastify / Express实例,否则无法动态注册路由

有一个issue,其中讨论了动态路由模块,但这可能不会很快成为嵌套的一部分:

目前卡米尔和我都很忙,所以这个问题可能需要一些时间 - 除了别人接受任务:)


但是您可以使用OnModuleInit生命周期事件来执行静态初始化:

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

它会在您的应用启动时调用一次,并且可以访问控制器中注入的提供程序,例如:你的DefinitionService

© www.soinside.com 2019 - 2024. All rights reserved.