我想知道我是否可以使用工厂初始化控制器然后将其添加到模块中。代码可能看起来像这样,但这不起作用:
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的例子,但我在文档或谷歌上找不到任何控制器。
使用与自定义提供程序相当的异步工厂来定义控制器是不可能的。除非使用native express / fastify实例,否则无法添加动态端点/路由:
目前,除非使用内部HTTP / Fastify / Express实例,否则无法动态注册路由
有一个issue,其中讨论了动态路由模块,但这可能不会很快成为嵌套的一部分:
目前卡米尔和我都很忙,所以这个问题可能需要一些时间 - 除了别人接受任务:)
但是您可以使用OnModuleInit生命周期事件来执行静态初始化:
@Injectable()
export class DefinitionController implements OnModuleInit {
onModuleInit() {
console.log(`Initialization...`);
}
它会在您的应用启动时调用一次,并且可以访问控制器中注入的提供程序,例如:你的DefinitionService
。