当前位置: 首页 > news >正文

网站转为移动网站查征信怎么查 个人免费查询

网站转为移动网站,查征信怎么查 个人免费查询,网站开发前端工程师,亚马逊品牌官网建设理解 NestJS 的 DI 管理机制 我们想要了解依赖注入#xff08;Dependency Injection, DI#xff09;最核心的工作逻辑NestJS 拥有自己的一套 DI 管理系统#xff0c;它通过一个称为 DI 容器 的机制#xff0c;来统一管理应用中所有类#xff08;class#xff09;的依赖关…理解 NestJS 的 DI 管理机制 我们想要了解依赖注入Dependency Injection, DI最核心的工作逻辑NestJS 拥有自己的一套 DI 管理系统它通过一个称为 DI 容器 的机制来统一管理应用中所有类class的依赖关系与生命周期这与传统的手动 new 实例的方式不同是实现控制反转IoC的关键 NestJS 初始化流程概览 为了更好地理解 NestJS 的工作流程我们来看其初始化与依赖管理的整体流程启动阶段程序启动时NestJS 会从主模块如 AppModule开始解析。依赖解析系统会扫描带有 Injectable() 注解的类读取其构造函数constructor分析其依赖关系。实例化与注册将这些类及其依赖关系注册到 DI 容器中并创建其实例。模块通信通过模块间的 imports、exports 与 providers 属性建立模块与服务之间的依赖路径。 理解重点整个流程是自动化的开发者只需通过注解与配置告诉 NestJS 哪些类需要注册以及哪些模块之间有依赖关系 关键术语解释与概念澄清 1 ) 注解Decorator与 Injectable() Injectable() 是一个装饰器Decorator用于标记一个类可以被 NestJS 的 DI 容器管理。当类被标记为 Injectable()NestJS 会在程序启动时自动扫描并注册该类 2 ) DI 容器DI Container 不要将其与 Docker 容器混淆这里的“容器”是一个抽象概念指的是 NestJS 管理依赖的“区域”或“对象空间”在这个容器中所有的服务类Service都会被实例化并挂载供其他模块或控制器调用 3 ) 构造函数中的依赖注入Constructor Injection 在控制器Controller或其他服务类中我们通过构造函数声明依赖项如constructor(private readonly appService: AppService) {}NestJS 会自动识别构造函数中的依赖关系并注入对应的实例 模块化结构与 DI 系统的关系 在 NestJS 中模块Module是组织代码的核心单位通过模块间的引用关系我们可以构建复杂的依赖网络。 providers服务注册的核心 providers 是模块中用于注册服务类的地方。只有被注册到 providers 中的类才会被 DI 容器管理示例代码Module({providers: [AppService], }) export class AppModule {}exports服务导出供其他模块使用 如果一个模块中的服务需要被其他模块调用必须通过 exports 暴露出来。否则即使模块被导入imports也不能访问其内部的服务。示例代码Module({providers: [AppService],exports: [AppService], }) export class AppModule {}imports模块间依赖的桥梁 通过 imports我们可以将其他模块引入当前模块从而访问其 exports 出来的服务。如果某个控制器依赖的服务不在当前模块中必须通过 imports 明确引入目标模块。 常见问题与理解难点 1 ) 控制反转IoC与依赖注入DI的本质 传统方式中我们手动通过 new MyService() 创建实例。而在 NestJS 中我们只需声明依赖关系由框架自动完成实例化。这种方式称为控制反转即对象的创建过程不再由开发者控制而是交给 DI 容器处理。 2 ) 多模块嵌套下的依赖混乱 当模块结构复杂、存在嵌套时容易出现服务找不到的错误。错误提示Nest cant resolve dependencies of the SomeController解决方式 检查依赖服务是否在 providers 中注册。检查依赖模块是否被正确 imports。检查是否在 exports 中导出服务。3 ) 缺少 exports 或 providers 导致的访问失败 若服务类在 A 模块中定义但 B 模块需要使用它 A 模块必须将其注册到 providersA 模块必须在 exports 中导出该服务B 模块必须通过 imports 引入 A 模块代码示例模块与服务的注册与使用 以下是一个完整的 NestJS 模块结构示例帮助理解 DI 机制的运作 // app.service.ts import { Injectable } from nestjs/common;Injectable() export class AppService {getHello(): string {return Hello World!;} }// app.controller.ts import { Controller, Get } from nestjs/common; import { AppService } from ./app.service;Controller() export class AppController {// 构造函数中注入 AppService// 这个就是 获取DI中具体的Class类的实例告诉DI系统它们(controller 和 service)之间的依赖关系constructor(private readonly appService: AppService) {}Get()getHello(): string {return this.appService.getHello();} }// app.module.ts import { Module } from nestjs/common; import { AppController } from ./app.controller; import { AppService } from ./app.service;Module({imports: [], // 当前模块依赖的其他模块controllers: [AppController], // 控制器列表providers: [AppService], // 服务注册 启动时最先执行告诉DI系统将Service下的Class类进行初始化exports: [AppService], // 导出服务以供其他模块使用不导出则非AppModule的其他模块无法使用 }) export class AppModule {}倘若上面的AppController 关联的AppModule没有去包含AppService的这个模块或者是没有进行全局注册或者是在这个providers 里面提供service里面有没有它的一个具体的class类在DI系统中注册如果不在providers里面提供AppService它就会去在 imports 中找其他的模块其他的模块里面它需要有两个部分 或者是providers里面去进行注册还有一个需要要去export出来这样它就能获取到具体的这个实例了这是它的一个查询依赖的路径的原理 其次我可以直接在providers里面给它提供一个service它就可以去把这个service注册到DI系统里面去这样controller里面也是可以去获取得到对应的这个service的实例的在 constructor 中定义了 appService 其实就是 new AppService这个new 的这个过程是向上一级去进行查找 如果当前 providers里面没有就会去找 imports 的module 中寻找 providers 和 exports最后发现了这个AppService这是一个路径如果当前 providres 里面有它就会去交由DI系统里面自动的来去初始化一个APP的实例掌握 NestJS 的核心机制 DI 容器 是管理所有服务实例的核心模块结构 是组织依赖和实现模块化开发的基础控制反转 和 依赖注入 是实现松耦合、高内聚架构的关键模块间的 imports、exports、providers 配置决定了服务的可用性与作用域
http://www.pierceye.com/news/858363/

相关文章:

  • 泉州网站深圳航空公司官网首页
  • 百度推广整体优化网站整体软装设计公司
  • 太原搜索引擎优化招聘信息服务好的镇江网站优化
  • 自己做网站下载怎么网站基础知识域名5个点
  • 网站搭建合作协议wordpress注册页面插件
  • 网络公司最好的是哪个兰州网络推广优化怎样
  • 网站文章采集工具新网站怎么做流畅
  • discuz 手机网站模板山东省住房建设厅网站首页
  • 网站建设违约责任条款枣庄专业做网站
  • python做爬虫和做网站做两个一摸一样的网站
  • 网站做微信登录asp.net做网站头部和尾部_都用什么来实现
  • 南充哪里做网站太原关键词优化公司
  • 哪个网站做的ppt模板好投放广告网站
  • 公司网站中新闻中心怎样做优化百度浏览器电脑版
  • 厦门网站建设 九来外国做视频在线观看网站
  • 用.net做购物网站山东建筑公司实力排名
  • 做百度推广网站找谁好宁夏省建筑信息平台
  • phpcmsv9手机网站源码网站开发ide php
  • 学校网站建设成功案例微信公众号网站导航怎么做
  • 重庆汽车网站建设建立大安全大应急框架
  • 重庆模板建站定制网站做企业网站到哪里找
  • asp技术做网站网站建设推广是什么工作室
  • 运营公众号还是做网站室内装修设计软件哪个好用
  • 卖营销软件的网站如何利用站群做网站
  • 网站空间价格怎么算网站制作与发布
  • 做网站的动态图片廊坊做网站哪家好
  • 建设企业网站报价怎么做网站logo
  • 企业类网站谷歌seo招聘
  • asp.net网站安装顺序idc 公司网站模板
  • 新手学做网站优化2022app分类排行