我想知道是否可以使用工厂初始化控制器,然后将其添加到模块中。代码可能看起来像这样,但这不起作用:
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的示例,但是我在文档或Google上找不到控制器的任何内容。
答案 0 :(得分:2)
无法使用与自定义提供程序可比的异步工厂来定义控制器。除非使用本机Express / Fastify实例,否则您无法添加动态端点/路由:
目前,除了动态注册路由外,没有其他方法 通过使用内部HTTP / Fastify / Express实例
有一个issue讨论了动态路由模块,但这可能不会很快成为嵌套的一部分:
此刻,我和我俩都很忙,所以这个问题可能会发生 一段时间-除了其他人承担任务:)
但是您可以使用OnModuleInit生命周期事件进行静态初始化:
@Injectable()
export class DefinitionController implements OnModuleInit {
onModuleInit() {
console.log(`Initialization...`);
}
当您的应用启动并可以访问控制器中注入的提供程序时,它将被调用一次,例如您的DefinitionService
。