栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在NestJS中导入具有依赖注入的TypeScript模块

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在NestJS中导入具有依赖注入的TypeScript模块

TL; DR

  • import
    ->类参考
  • DI->类实例化
  • 可以通过字符串标记进行匹配,但最好使用类引用。

封装形式

依赖项注入系统主要处理类的实例化。这很好,因为您不必关心要注入的类所需的可传递依赖项。

例如:我想用

UserService
我的
UserController
。在
UserService
需要
UserModel
进行实例化。但是,此二级依赖项隐藏在中
UserController
。这很棒,因为当
UserService
获得新的依赖项(例如)时
LoggingService
UserController
不必更改。

所以代替

class UserController {  constructor() {    const userModel = new UserModel();    this.userService = new UserService(userModel);  }}

你可以做

class UserController {  // the transitive dependency on UserModel is hidden  constructor(private userService: UserService) {}}

类参考

但是,为了让DI知道要注入的服务,您需要从

@Inject
声明到实际类的某个链接进行实例化。当然,这种机制取决于DI系统的实现。引用可以按名称(字符串匹配),按接口(DI决定使用哪种实现:
UserService

->
UserServiceImpl
/
MockUserServiceImpl
)或在默认情况下由要实例化的类直接在nestjs中进行引用。

尽管在nestjs中可以按名称进行匹配,但是按类进行匹配是首选,因为它使重构更加容易。

创建自定义提供程序时,您可以选择要用于匹配的令牌类型。当您要注入值时(没有用于匹配的类),这是必需的

const connectionProvider = {  provide: 'Connection',  usevalue: connection,};@Module({  providers: [connectionProvider],})

或动态实例化的类。

const configServiceProvider = {  provide: ConfigService,  useClass: process.env.NODE_ENV === 'development'    ? DevelopmentConfigService    : ProductionConfigService,};@Module({  providers: [configServiceProvider],})


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448813.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号