【发布时间】:2020-05-17 21:31:22
【问题描述】:
是否可以仅使用 Nest.js 框架中的 DI 和 IoC 功能?如果是,如何实现?
我尝试以这种方式实现它:
import { NestFactory } from "@nestjs/core";
import { Module, Injectable } from "@nestjs/common";
@Injectable()
class AppRepository {
sayHi() {
console.log("app repository");
console.log("Hello");
}
}
@Injectable()
class AppService {
constructor(private appRepository: AppRepository) {}
sayHi() {
console.log("app service");
this.appRepository.sayHi();
}
}
@Module({
imports: [],
providers: [AppService, AppRepository]
})
class AppModule {
constructor(private appService: AppService) {}
sayHi() {
console.log("app module");
this.appService.sayHi();
}
}
async function bootstrap() {
const app = await NestFactory.createApplicationContext(AppModule);
const module = app.get<AppModule>(AppModule);
module.sayHi();
}
bootstrap();
但是当我运行代码时,我得到:
app module
(node:70976) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'sayHi' of undefined
at AppModule.sayHi (/Users/jakub/projects/nest-di-clean/build/main.js:47:25)
at /Users/jakub/projects/nest-di-clean/build/main.js:60:16
at Generator.next (<anonymous>)
at fulfilled (/Users/jakub/projects/nest-di-clean/build/main.js:11:58)
at process._tickCallback (internal/process/next_tick.js:68:7)
at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
所以我得到了AppModule 的实例,但没有注入AppService 的实例。
我想在我贡献的库中使用它,不需要控制器和其他服务器端的东西。
【问题讨论】:
-
您使用的是哪个版本的 Nest?启动一个新项目并复制粘贴您的代码我没有收到任何错误
-
@JayMcDoniel 感谢您尝试这个。如我的回答中所述,我的 tsconfig 错误。
标签: javascript dependency-injection nestjs