Angular和NestJS都使用依赖注入来管理应用程序中不同类之间的依赖关系。在运行时,当需要创建一个实例对象时,框架需要知道它所依赖的其他对象,这些对象可以通过构造函数参数来传递。为了让框架知道如何创建这些对象以及在哪里找到它们,我们需要为它们提供元数据。
对于Angular,元数据包含在装饰器的参数中。例如:
import { Component, Inject } from '@angular/core';
import { MyService } from './my-service';
@Component({
selector: 'my-component',
templateUrl: './my-component.html'
})
export class MyComponent {
constructor(@Inject(MyService) private myService: MyService) {}
}
在这个例子中,@Inject(MyService)
装饰器告诉Angular在运行时将MyService
注入到MyComponent
的构造函数中。
对于NestJS,元数据存储在类的构造函数参数中。例如:
import { Controller, Get } from '@nestjs/common';
import { MyService } from './my-service';
@Controller()
export class MyController {
constructor(private myService: MyService) {}
@Get('/')
myMethod() {
return this.myService.doSomething();
}
}
在这个例子中,MyService
被注入到MyController
的构造函数中,因此在myMethod
中可以访问该服务。
总之,这些框架可以从编译时的TypeScript类型提示中解析注入令牌,使得开发人员可以使用类型来描述应用程序中的依赖关系,进而在运行时自动实例化依赖对象。