在NestJS的依赖注入(DI/依赖变为参数)流程中,
启动时首先由容器注册所有类。容器会分析这些类,确定它们各自的依赖项。
当请求创建一个类的实例时,容器会创建所需的所有依赖,并将它们一起注入到所请求的类实例中。这个过程保证了类实例能够获得其所需的所有依赖项。
容器还会保留创建的依赖实例,以便在需要时重用它们,从而提高效率和性能。通过这种方式,NestJS的DI容器帮助管理和简化了应用中的依赖管理。
他怎么知道:
我什么时候依赖注入?
我什么时候需要创建类实例?
我没有写构造函数 他是怎么注入进去的?
什么叫保留创建的依赖实例?
NestJS通过几个方式知道何时进行依赖注入和创建类实例:
- 构造函数注入:NestJS分析类的构造函数参数。即使没有显式写出构造函数,TypeScript编译器会生成一个隐式的构造函数,NestJS可以通过反射机制读取其参数类型。
- 装饰器:NestJS使用装饰器(如
@Injectable())来标记服务类,这告诉容器这些类需要管理依赖关系。 - 请求实例:当你在控制器或其他服务中请求一个服务时,NestJS的容器自动解析所需的依赖,并创建或提供现有的实例。(service)
- 保留实例:DI容器保持对已创建实例的引用,并在需要时重用这些实例,而不是每次都创建新的实例。这是通过单例模式实现的,保证了效率和一致性。
这样的机制确保了应用在运行时能高效地处理依赖关系,同时降低了耦合度和复杂性。