刚开始学习nestJS,有一个疑问--
在NestJS中,
A模块的Service需要调用B模块的service中一个方法,则需要在A的Service导入B的service
场景如下:
// A.Service
import { BService } from '../B/B.service';
@Injectable()
export class A {
constructor(
private readonly _BService: BService,
) {}
}
我的理解是:
- 在此处@Injectable装饰器已经将B的Service类实例化了,
- 已经可以使用B的类方法了。
但为什么还需要在A的module.ts中导入B模块呢?
像是这样:
// A.module.ts
import { BModule } from '../B/B.module';
@Module({
imports: [BModule],
controllers: [AController],
providers: [AService],
exports: [AService],
})
export class AModule {}
首先说,为啥"为什么还需要在A的module.ts中导入B模块呢"?
因为
BService
的作用域只在BModule
里,所以你要在AController
里直接用,就会报错拿不到实例。再来说,"有什么办法可以让
BService
随处直接用么?",参考如下手段:B 的module 声明时,加上
@Global
,如下:这样,你就不用在
AModule
的声明里引入BModule
了。关于『你的理解』部分,貌似你把
@Inject
和@Injectable
搞混了,建议再读一读这个部分的文档,多做些练习/尝试,自己感受下每个api的特点。最后,官网文档里其实有介绍 ,看依赖注入